Stack
- 环境:蔚蓝
- 安装类型:自定义
- 基本操作系统:Centos 7.3
- Docker:1.12.5
我要说的第一件事是,我在 AWS 中使用相同的配置文件在AWS中使用相同的配置文件进行apiserver
、manager
、scheduler
、kubelet
和kube-proxy
。
这是 kubelet 配置:
/usr/bin/kubelet
--require-kubeconfig
--allow-privileged=true
--cluster-dns=10.32.0.10
--container-runtime=docker
--docker=unix:///var/run/docker.sock
--network-plugin=kubenet
--kubeconfig=/var/lib/kubelet/kubeconfig
--serialize-image-pulls=true
--cgroup-root=/
--system-container=/system
--node-status-update-frequency=4s
--tls-cert-file=/var/lib/kubernetes/kubernetes.pem
--tls-private-key-file=/var/lib/kubernetes/kubernetes-key.pem
--v=2
Kube-proxy 配置:
/usr/bin/kube-proxy
--master=https://10.240.0.6:6443
--kubeconfig=/var/lib/kubelet/kubeconfig
--proxy-mode=iptables
--v=2
行为:
登录到任何节点上的任何 Pod:
nslookup kubernetes 10.32.0.10
Server: 10.32.0.10
Address 1: 10.32.0.10 kube-dns.kube-system.svc.cluster.local
nslookup: can't resolve 'kubernetes': Try again
工作是:
nslookup kubernetes.default.svc.cluster.local. 10.32.0.10
Server: 10.32.0.10
Address 1: 10.32.0.10 kube-dns.kube-system.svc.cluster.local
Name: kubernetes.default.svc.cluster.local.
Address 1: 10.32.0.1 kubernetes.default.svc.cluster.local
所以我发现在 azure 上,resolv.conf看起来像这样:
; generated by /usr/sbin/dhclient-script
search ssnci0siiuyebf1tqq5j1a1cyd.bx.internal.cloudapp.net
10.32.0.10
options ndots:5
如果我添加了default.svc.cluster.local
svc.cluster.local cluster.local
的搜索域.
一切都开始工作,我明白为什么。
但是,这是有问题的,因为对于我创建的每个命名空间,我都需要管理resolv.conf。
当我在亚马逊中部署时,这不会发生,所以我有点困惑为什么它会在 Azure 中发生。
Kubelet 有一个命令行标志,cluster-domain
看起来你缺少它。查看文档
将--cluster-domain=cluster.local
添加到 kubelet 命令启动时,它应该按预期开始工作。