Skip to content

打通到Mac下Docker Desktop的DNS域名解析和网络访问

Notifications You must be signed in to change notification settings

l-grebe/docker-for-mac-kubernetes-devkit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

docker-for-mac-kubernetes-devkit

打通到Mac下Docker Desktop的DNS域名解析和网络访问。

在您的Mac上,Docker Desktop可以运行一个单节点的Kubernetes,具体可以参见:https://docs.docker.com/docker-for-mac/#kubernetes

该Kubernetes其实是运行在Mac下的轻量虚拟机里,只通过和localhost的端口挂关联,让Mac用户能访问到,这里会记录打通到该kubernes的DNS解析,以及网络访问。

打通kubernetes DNS域名解析

思路:

  • 将Kubernetes DNS服务提供的端口,暴露给Mac。
  • Mac上通过brew运行一个dnsmasq服务,将含有cluster.local的域名转发到Kubernetes DNS服务,其它不变。
  • Mac网络配置上,设置DNS服务器为127.0.0.1

操作记录如下:

暴露端口给Mac:
# 将kube-system该Namespace下kube-dns服务改为NodePort类型,并将53端口的nodePort设置为20053,保存。
kubectl --namespace kube-system edit svc kube-dns
# 可查看更改后的端口映射情况。
kubectl get svc --namespace kube-system
配置dnsmasq服务:
# brew 安装 dnsmas:
brew install dnsmasq
# /opt/homebrew/etc/dnsmasq.conf配置文件更改如下:
#上游DNS路径
resolv-file=/etc/resolv.dnsmasq.conf
#取消strict-order注释
strict-order
#反劫持
# bogus-nxdomain=114.114.114.114
#指定域名解析到固定内部IP
#指定10.96网段使用kubernetes的DNS进行解析
server=/cluster.local/127.0.0.1#20053
# /etc/resolv.dnsmasq.conf文件内容:
nameserver 127.0.0.1
nameserver 114.114.114.114
nameserver 8.8.8.8
# 启动dnsmasq服务
sudo brew service start dnsmasq
# 查看dnsmasq服务运行情况
sudo brew service list
设置Mac DNS服务器:

Mac -> 系统偏好设置 -> 网络 -> 高级 -> DNS -> 添加DNS服务器 -> 127.0.0.1

测试:
$ nslookup kube-dns.kube-system.svc.cluster.local

Server:		127.0.0.1
Address:	127.0.0.1#53

Name:	kube-dns.kube-system.svc.cluster.local
Address: 10.96.0.10

打通到Kubernetes的网络访问

由于 Docker for Mac 容器实际上运行在由 HyperKit 提供支持的 VM 中,因此您无法直接与容器进行交互。此处有更多详细信息: Docker for Mac - Networking - Known limitations, use cases, and workarounds

为了解决这个问题,可以在虚拟机内部以host网络模式运行一个 OpenVPN 服务器容器,然后你就可以通过其内部 IP 访问容器。您可以使用 docker-compose 或在 Kubernetes 上运行 OpenVPN 服务器。

当然,您可以在没有 Kubernetes 的情况下遵循 docker-compose 方法。

一般来说,它是这样工作的:

Mac <-> Tunnelblick <-> socat/service <-> OpenVPN Server <-> Containers

准备工作

  1. 安装 Tunnelblick (一个开源的GUI OpenVPN client for Mac)。

  2. 切换到 docker-for-mac-openvpn 目录。

构建镜像

docker build --file openvpn.dockerfile --tag openvpn:local .

在Kubernetes下运行OpenVPN

  1. 安装 helm (Kubernetes下的包管理工具).

  2. 拷贝values.default.yamlvalues.yaml,然后修改values.yaml相关配置:

dirPaths:
  # The project dir.
  data: /tmp/docker-for-mac-kubernetes-devkit/docker-for-mac-openvpn
  # Local dir to hold generated files.
  local: /tmp/docker-for-mac-kubernetes-devkit/docker-for-mac-openvpn/local
  # Local dir to hold generated server configs.
  configs: /tmp/docker-for-mac-kubernetes-devkit/docker-for-mac-openvpn/local/configs
  1. 运行OpenVPN 服务:
helm install -f values.yaml . --generate-name

配置Client并启动Tunnelblick

现在,您将在./local/docker-for-mac.ovpn 获得客户端配置文件,对配置文件做如下更改:

  1. 将remote端口改为31194(也就是OpenVPN server的对外端口。)

  2. 添加comp-lzo no该行配置

  3. 在客户端配置底部添加您想要访问的子网,如下所示,并连接到本地 OpenVPN 服务器。

route 172.16.0.0 255.255.0.0
route 10.96.0.1 255.240.0.0

到这里,连上vpn,就能通过域名访问kubernetes服务了!

http://rabbitmq.default.svc.cluster.local:15672/#/

参考文档:

About

打通到Mac下Docker Desktop的DNS域名解析和网络访问

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published