coredns的实例health_check不通过的问题,排查和解决方法

遇到的问题

1、发现问题

pod启动但是未ready
在这里插入图片描述
查看是readiness失败
在这里插入图片描述使用对应的URL进行curl,发现真的返回503
在这里插入图片描述

2、排查问题

查看错误日志,发现一堆这个错误"waiting on : kubernetes"
在这里插入图片描述

网上相关的问题解答
这个跟测试场景不一样,这个案例是开了防火墙,可以确认我这个案例的机器没有开防火墙,但它提醒了一点,coredns是需要访问apiserver的,因此我做了抓包
在这里插入图片描述

coredns在访问apiserver时出现以上的错误,客户端不信任服务端的证书
出现这种情况可能有

  1. 客户端获取到不是apiserver的证书,这个通过抓包可以确认目标地址
  2. 自签名证书问题,其他组件没有出现这个问题
  3. 客户端访问的域名与证书的DNS域名不匹配(最大可能)
3、解决方法

在coredns的yaml指定访问的域名和绑定域名对应的IP

spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
  selector:
    matchLabels:
      k8s-app: kube-dns
  template:
    metadata:
      labels:
        k8s-app: kube-dns
    spec:
      priorityClassName: system-cluster-critical
      serviceAccountName: coredns
...
      hostAliases:  # DNS绑定
      - ip: "10.199.202.16"
        hostnames:
        - "k8s.justin.com"
      containers:
      - name: coredns
        image: coredns/coredns:1.8.6
        imagePullPolicy: IfNotPresent
        env:
          - name: KUBERNETES_SERVICE_HOST
            value: "k8s.justin.com"  # 域名
...

在这里插入图片描述
apply配置,work
在这里插入图片描述

Logo

开源、云原生的融合云平台

更多推荐