首页 > 系统服务 > 详细

Docker for Mac k8s 网络不通

时间:2020-07-13 23:06:41      阅读:238      评论:0      收藏:0      [点我收藏+]

前言

从 macOS 的 Docker Desktop 启动 k8s,并设置了 ingress 做 app 的访问测试时,发现宿主机访问不了目标 url,开始以为是 ingress 没设置好,经过排查之后发现是网络不通。

问题所在

在查找了 Docker Desktop 的相关文档后,看到这段说明:

Because of the way networking is implemented in Docker Desktop for Mac, you cannot see a docker0 interface on the host. This interface is actually within the virtual machine.
由于网络是在 Mac 的 Docker Desktop 中实现的,所以在主机上看不到 docker0 接口。这个接口实际上在虚拟机中。

这里解释为在「虚拟机」中,即,实际上 macOS 上运行的 Docker 是虚拟机架构的,通过虚拟机 Linux 的 Namespace、CGroups 等资源来实现在 macOS 上运行 Docker,结构如下图:

技术分享图片

故此,宿主机与 Docker 及 K8s 中的网段是不相通的。

解决

在 Github 上找到一种解决办法——在 Docker 中启用 SOCKS 服务。在此之间留意自己的 Docker 版本,该功能发布的版本:Version 18.03.0-ce-rc2-mac56 (23206)

需要使用 jq 命令,若无,可用 brew 安装

$ brew install jq

关闭 Docker,编辑文件启用 SOCKS Server

$ cd ~/Library/Group\ Containers/group.com.docker/
$ mv settings.json settings.json.backup
$ cat settings.json.backup | jq ‘.["socksProxyPort"]=8888‘ > settings.json

修改完成后重启 Docker & k8s,接下来开始设置代理,依次打开:系统偏好设置 -> 网络 -> 高级 -> 代理,设置 SOCKS Server 信息。

技术分享图片

网页中再访问 ingress 目标 url 时,便能正常访问了。

技术分享图片

如终端需要使用代理时,编辑 ~/.zshrc 加入代理配置即可:

$ vim ~/.zshrc
export all_proxy=socks5://127.0.0.1:8888
$ source ~/.zshrc
技术分享图片

参考自:
https://docs.docker.com/docker-for-mac/networking/#there-is-no-docker0-bridge-on-macos
https://github.com/docker/for-mac/issues/2670

Docker for Mac k8s 网络不通

原文:https://www.cnblogs.com/nnylee/p/13296116.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!