Kubernetes DNS故障排除
我正在尝试解决K8集群v1.19中的DNS问题。有3个节点(1个控制器,2个工作节点)都使用Calico网络运行vanilla Ubuntu 20.04,用于入站负载平衡。这是所有托管的前提下,并有充分的访问互联网。它前面还有一个代理服务器(Traefik),负责处理K8集群的SSL和基础架构中的其他服务 这个问题发生在我升级连接到redis吊舱的吊舱的舵图时,但在过去的36天里,我一直很乐意运行 在其中一个pod的日志中,它显示了一个错误,无法确定redis pod的位置:Kubernetes DNS故障排除,kubernetes,redis,coredns,Kubernetes,Redis,Coredns,我正在尝试解决K8集群v1.19中的DNS问题。有3个节点(1个控制器,2个工作节点)都使用Calico网络运行vanilla Ubuntu 20.04,用于入站负载平衡。这是所有托管的前提下,并有充分的访问互联网。它前面还有一个代理服务器(Traefik),负责处理K8集群的SSL和基础架构中的其他服务 这个问题发生在我升级连接到redis吊舱的吊舱的舵图时,但在过去的36天里,我一直很乐意运行 在其中一个pod的日志中,它显示了一个错误,无法确定redis pod的位置: 如果您有任何关于疑
如果您有任何关于疑难解答的想法,我们将不胜感激。这就是我们测试dns的方法 创建以下部署
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
labels:
app: nginx
spec:
serviceName: "nginx"
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumes:
- name: www
emptyDir:
运行以下测试
master $ kubectl get po
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 1m
web-1 1/1 Running 0 1m
master $ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 35m
nginx ClusterIP None <none> 80/TCP 2m
master $ kubectl run -i --tty --image busybox:1.28 dns-test --restart=Never --rm
If you don't see a command prompt, try pressing enter.
/ # nslookup nginx
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: nginx
Address 1: 10.40.0.1 web-0.nginx.default.svc.cluster.local
Address 2: 10.40.0.2 web-1.nginx.default.svc.cluster.local
/ #
/ # nslookup web-0.nginx
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: web-0.nginx
Address 1: 10.40.0.1 web-0.nginx.default.svc.cluster.local
/ # nslookup web-0.nginx.default.svc.cluster.local
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: web-0.nginx.default.svc.cluster.local
Address 1: 10.40.0.1 web-0.nginx.default.svc.cluster.local
master$kubectl获得采购订单
名称就绪状态重新启动
web-0 1/1运行0 1m
web-1 1/1运行0 1m
master$kubectl获得svc
名称类型CLUSTER-IP外部IP端口年龄
kubernetes ClusterIP 10.96.0.1 443/TCP 35m
nginx ClusterIP None 80/TCP 2m
master$kubectl run-i--tty--image-busybox:1.28 dns测试--restart=Never--rm
如果看不到命令提示,请尝试按enter键。
/#nsnginx
服务器:10.96.0.10
地址1:10.96.0.10 kube-dns.kube-system.svc.cluster.local
姓名:nginx
地址1:10.40.0.1 web-0.nginx.default.svc.cluster.local
地址2:10.40.0.2 web-1.nginx.default.svc.cluster.local
/ #
/#nslookup web-0.nginx
服务器:10.96.0.10
地址1:10.96.0.10 kube-dns.kube-system.svc.cluster.local
名称:web-0.nginx
地址1:10.40.0.1 web-0.nginx.default.svc.cluster.local
/#nslookup web-0.nginx.default.svc.cluster.local
服务器:10.96.0.10
地址1:10.96.0.10 kube-dns.kube-system.svc.cluster.local
名称:web-0.nginx.default.svc.cluster.local
地址1:10.40.0.1 web-0.nginx.default.svc.cluster.local
为了回答我自己的问题,我删除了DNS吊舱,然后它又工作了。命令如下:
kubectl删除pod coredns-f9fd979d6-sw2qp--namespace=kube系统
这并没有解决为什么会发生这种情况,或者为什么K8没有检测到这些豆荚有问题并重新创建它们的根本问题。我将继续深入研究这个问题,并在DNS吊舱上添加更多的检测工具,以了解导致此问题的原因
如果有人对如何连接或查看仪器有任何想法,我们将不胜感激。您的kube代理有效吗@马里乌兹克。kube代理正在工作。从集群外部,我可以访问端口443上的web客户端pod,并正确呈现。看起来是DNS服务:
kubectl run-I--tty--image-busybox:1.28 DNS测试--restart=Never--rm如果没有看到命令提示,请尝试按enter键。/#nslookup nginx服务器:10.96.0.10地址1:10.96.0.10 nslookup:无法解析“nginx”/#nslookup web-0.nginx服务器:10.96.0.10地址1:10.96.0.10 nslookup:无法解析“web-0.nginx”/#nslookup web-0.nginx.default.svc.cluster.local Server:10.96.0.10地址1:10.96.0.10 nslookup:无法解析“web-0.nginx.default.svc.cluster.local”
下一步怎么办?找到问题了吗?我面临着类似的问题。不幸的是,我没有,我们所做的是从vanilla Kubernetes切换到使用Microk8s,我们现在有多个集群,正常运行时间约为6个月,DNS没有问题。
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
labels:
app: nginx
spec:
serviceName: "nginx"
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumes:
- name: www
emptyDir:
master $ kubectl get po
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 1m
web-1 1/1 Running 0 1m
master $ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 35m
nginx ClusterIP None <none> 80/TCP 2m
master $ kubectl run -i --tty --image busybox:1.28 dns-test --restart=Never --rm
If you don't see a command prompt, try pressing enter.
/ # nslookup nginx
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: nginx
Address 1: 10.40.0.1 web-0.nginx.default.svc.cluster.local
Address 2: 10.40.0.2 web-1.nginx.default.svc.cluster.local
/ #
/ # nslookup web-0.nginx
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: web-0.nginx
Address 1: 10.40.0.1 web-0.nginx.default.svc.cluster.local
/ # nslookup web-0.nginx.default.svc.cluster.local
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: web-0.nginx.default.svc.cluster.local
Address 1: 10.40.0.1 web-0.nginx.default.svc.cluster.local