某些查询中附加的kubernetes dns搜索域
我运行了一个kubernetes集群,其中有一个主节点和两个工作节点某些查询中附加的kubernetes dns搜索域,kubernetes,coredns,Kubernetes,Coredns,我运行了一个kubernetes集群,其中有一个主节点和两个工作节点 root@kube-master:~# kubectl get nodes NAME STATUS ROLES AGE VERSION kube-master Ready master 4d19h v1.14.3 kube-node-01 Ready <none> 4d18h v1.14.3 kube-node-02 Ready
root@kube-master:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube-master Ready master 4d19h v1.14.3
kube-node-01 Ready <none> 4d18h v1.14.3
kube-node-02 Ready <none> 6h3m v1.14.3
除了名称空间
因为kubernetes 1.11 coredns是默认的dns解析系统。在第页用coredns调试dns系统时说我应该使用
root@kube-master:~# kubectl get pods --namespace=kube-system -l k8s-app=coredns
No resources found.
但这不会返回任何东西!使用kube dns
返回coredns
pods
root@kube-master:~# kubectl get pods --namespace=kube-system -l k8s-app=kube-dns
NAME READY STATUS RESTARTS AGE
coredns-fb8b8dccf-jmhdm 1/1 Running 5 4d19h
coredns-fb8b8dccf-tfw7v 1/1 Running 5 4d19h
这是怎么回事?!我的集群中的文档是否有错误或其他内容?我将使用nginx入口控制器示例向您展示和解释。我相信traefik入口控制器的情况也是如此 首先,关于您描述的
kube dns
和coredns
混乱:
这是通过设计实现的。你可以参考阅读更多
在我的集群中,我还有一个名为kube-dns
的coredns
服务,它所指的coredns
pod具有k8s-app=kube-dns
标签
kubectl describe service kube-dns -n kube-system
Name: kube-dns
Namespace: kube-system
Labels: k8s-app=kube-dns
kubernetes.io/cluster-service=true
kubernetes.io/name=KubeDNS
Annotations: prometheus.io/port: 9153
prometheus.io/scrape: true
Selector: k8s-app=kube-dns
Type: ClusterIP
IP: 10.96.0.10
Port: dns 53/UDP
TargetPort: 53/UDP
Endpoints: 10.32.0.2:53,10.32.0.9:53
Port: dns-tcp 53/TCP
TargetPort: 53/TCP
Endpoints: 10.32.0.2:53,10.32.0.9:53
Port: metrics 9153/TCP
TargetPort: 9153/TCP
Endpoints: 10.32.0.2:9153,10.32.0.9:9153
Session Affinity: None
Events: <none>
kubectl get pods -n kube-system -l k8s-app=kube-dns -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
coredns-fb8b8dccf-42285 1/1 Running 0 3h26m 10.32.0.9 kubernetessandbox-1-vm <none> <none>
coredns-fb8b8dccf-87j5v 1/1 Running 0 3h26m 10.32.0.2 kubernetessandbox-1-vm <none> <none>
但同时,我的nginx ingress控制器pod具有名称服务器169.254.169.254
,甚至无法查找kubernetes.default
cat /etc/resolv.conf
search c.myproj.internal. google.internal.
nameserver 169.254.169.254
不确定traefic pod上的/etc/resolv.conf
中有什么内容,但问题就在这里。你已经从你的节点中得到了/etc/resolv.conf
如果ingress使用HostNet而不是dnsPolicy:ClusterFirst设置dnsPolicy:ClusterFirst,则可以解决此问题
发件人:
“ClusterFirstWithHostNet”:对于使用hostNetwork运行的播客,您可以
应明确设置其DNS策略“ClusterFirstWithHostNet”
从中编辑nginx入口控制器部署后
dnsPolicy: ClusterFirst
hostNetwork: true
到
使用所需的/etc/resolv.conf重新创建pod:
cat /etc/resolv.conf
search kube-system.svc.cluster.local svc.cluster.local cluster.local c.myproj.internal. google.internal.
nameserver 10.96.0.10
options ndots:5
nslookup kubernetes.default
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: kubernetes.default.svc.cluster.local
Address: 10.96.0.1
针对hostNetwork/dnsPolicy相关问题和说明的URL很少。这是正确配置Traefik的重要部分:
(一)
(二)
3) 第条:
此设置很重要。它将配置要使用的Traefik吊舱
Kubernetes群集内部DNS服务器(很可能是KubeDNS或
这意味着pods/etc/resolv.conf将
配置为使用Kubernetes DNS服务器。否则,DNS服务器
将使用Kubernetes节点的(基本上是
工作节点,但无法解析群集。本地DNS(例如)
希望有帮助。默认的NDOT:n为5。这意味着,如果名称中包含少于5个点,系统调用将尝试先通过所有本地搜索域依次解析它,如果没有成功,则最后将仅作为绝对名称解析。与searchdomains conta组合时,这也是一个问题ining通配符条目-所有外部请求都将获得通配符答案
cat /etc/resolv.conf
search c.myproj.internal. google.internal.
nameserver 169.254.169.254
dnsPolicy: ClusterFirst
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
hostNetwork: true
cat /etc/resolv.conf
search kube-system.svc.cluster.local svc.cluster.local cluster.local c.myproj.internal. google.internal.
nameserver 10.96.0.10
options ndots:5
nslookup kubernetes.default
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: kubernetes.default.svc.cluster.local
Address: 10.96.0.1
dnsPolicy: ClusterFirstWithHostNet