我有一台用于 CI/CD 的 Ubuntu 20.04 服务器,它使用 Docker 来构建和发布镜像。
所需的资源不是那么多,因此我决定在该服务器上安装 Kubernetes,以便向我的 k8s 集群添加第二个主节点。
因此我kubespray
将其作为主节点运行,安装成功完成。自从安装 k8s 以来,我遇到了一个奇怪的问题。
使用命令行kubectl exec -it podname -- sh
我可以做一个nslookup google.com
并且它运行良好。
Server: 192.168.1.1
Address: 192.168.1.1:53
Non-authoritative answer:
Name: google.com
Address: 2607:f8b0:4020:805::200e
Non-authoritative answer:
Name: google.com
Address: 172.217.13.142
一旦我使用docker exec -it ubuntu bash
命令行,我就无法在未使用 kubernetes 层的纯 docker 容器中解析任何 dns 条目。
docker 守护进程使用 kubernetes dns 进行解析。在文件中,/etc/systemd/system/docker.service.d/docker-dns.conf
它设置为
Environment="DOCKER_DNS_OPTIONS=\
--dns 10.233.0.3 --dns 127.0.0.53 \
--dns-search default.svc.cluster.local --dns-search svc.cluster.local --dns-search lan \
--dns-opt ndots:2 --dns-opt timeout:2 --dns-opt attempts:2"
是否可以在 k8s 节点上运行纯 docker 容器?
更新
经过一段时间的调试,我发现这不是 DNS 问题,而是整个流量无法超出 docker 网络。
当我尝试使用时我发现了这一点apt update
,我可以看到它能够解析存储库地址,但无法到达镜像。
除非我有更多时间,否则我只会托管另一个 cicd 服务器,而不会将 k8s 节点与其他任何东西混合。