• Docker for Mac k8s 网络不通


    前言

    从 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 时,便能正常访问了。

    注意:在网络设置的 SOCKS 代理,会影响你的网络从而上不了网,当不需要连通 Docker 网络的时候,得把这个代理设置给取消掉。笔者为了省事,不直接在网络设置中设置代理,而是用了另外一个浏览器单独设置代理来进行调试(主力 Firefox,所以这里用 Firefox Nightly 版来调试)

    仅 Firefox Nightly 中可访问,且不影响本机的网络环境:

    如终端需要使用代理时,编辑 ~/.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

  • 相关阅读:
    jQuery之设置元素内容(移动和复制元素,使用append(),appendTo()方法)
    如何使用CSS隐藏滚动条并且兼容大部分浏览器
    contentType和dataType
    JavaScript获取客户端IP地址
    IMG标签与before,after伪类
    转载《学习HTML5 canvas遇到的问题》
    如何禁用向窗口拖放文件
    等高响应式布局的原理和实现
    高德网络定位之“移动WiFi识别”
    Android Native 内存泄漏系统化解决方案
  • 原文地址:https://www.cnblogs.com/nnylee/p/13296116.html
Copyright © 2020-2023  润新知