• 阿里云k8s服务之间偶尔获取不到dns解析安装ACK NodeLocal DNSCache


    1.背景
    feign.RetryableException: No route to host (Host unreachable) executing POST http://osale-thirdparty/empty/detect
    服务突然会中断,开发在看日志的时候会出现host找不到的情况,阿里云技术推荐安装dns缓存组件,加上这个组件会解决这种问题。一般是因为网络波动才会出现这个问题,参考文档 https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/configure-nodelocal-dnscache?spm=a2c4g.11186623.0.0.210c10baNQdY3T

    2.操作步骤
    方式一:配置DNSConfig自动注入
    DNSConfig动态注入控制器可用于自动注入DNSConfig至新建的Pod中,避免您手工配置Pod YAML进行注入。本应用默认会监听包含node-local-dns-injection=enabled标签的命名空间中新建Pod的请求,您可以通过以下命令给命名空间打上Label标签。

    kubectl label namespace default node-local-dns-injection=enabled
    kubectl label namespace yxyw node-local-dns-injection=enabled
    kubectl label namespace yxyw-uat node-local-dns-injection=enabled
    kubectl get ns --show-labels
    kubectl get pods -o yaml osale-open-api-69f856757f-ngqgb -n yxyw-uat
    
    • 1
    • 2
    • 3
    • 4
    • 5

    说明
    上述命令仅会开启default命名空间的自动注入,如需对其它命名空间开启自动注入,则需要替换default为目标命名空间名称。

    在命名空间DNSConfig自动注入开启的情况下,如需对部分Pod进行豁免(即不进行注入),可以调整其Pod Template中Labels标签字段,加上node-local-dns-injection=disabled标签。

    ECI不支持NodeLocal DNSCache。当Deployment动态弹性扩容至ECI节点时,ECI上Pod会因无法连通NodeLocal DNSCache导致域名解析超时,此时必须对整个Deployment进行注入豁免,可以调整其Pod Template中的Labels标签字段加上node-local-dns-injection=disabled。
    开启自动注入后,您创建的Pod会被增加以下字段,为了最大程度上保证业务DNS请求高可用,nameservers中会额外加入kube-dns的ClusterIP地址作为备份的DNS服务器。

    dnsConfig:
        nameservers:
        - 169.254.20.10
        - 172.21.0.10
        options:
        - name: ndots
          value: "3"
        - name: attempts
          value: "2"
        - name: timeout
          value: "1"
        searches:
        - default.svc.cluster.local
        - svc.cluster.local
        - cluster.local
      dnsPolicy: None
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    Pod在同时满足以下条件时,才会自动注入DNS缓存。如果您的Pod容器未注入DNS缓存服务器的IP地址,请检查Pod是否未满足以下条件。

    新建Pod不位于kube-system和kube-public命名空间。

    新建Pod所在命名空间的Labels标签包含node-local-dns-injection=enabled。

    新建Pod所在命名空间的Labels不包含ECI Pod相关标签,例如virtual-node-affinity-injection、eci、alibabacloud.com/eci等。

    新建Pod没有被打上eci、alibabacloud.com/eci等ECI相关标签,或打上禁用DNS注入node-local-dns-injection=disabled标签。

    新建Pod的网络为hostNetwork且DNSPolicy为ClusterFirstWithHostNet,或Pod为非hostNetwork且DNSPolicy为ClusterFirst。
    注意验证是否注入成功要看pod的yaml,因为dnsconfig是直接注入了pod里面
    3.如果有些服务有特殊的dns配置要求,就会覆盖掉,所以要设置一下,禁用掉dns缓存配置,打上禁用DNS注入node-local-dns-injection=disabled标签

    apiVersion: apps/v1
    kind: Deployment  
    metadata:  
      name: @APP_NAME@
      labels:  
        app: @APP_NAME@
    spec:  
      replicas: @REPLICAS@
      revisionHistoryLimit: 10
      selector:  
        matchLabels:  
          app: @APP_NAME@
      template:  
        metadata:  
          labels:  
            app: @APP_NAME@
            armsPilotAutoEnable: "on"
            armsPilotCreateAppName: @APP_NAME@
            one-agent.jdk.version: "OpenJDK11"
            node-local-dns-injection: "disabled"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    spring boot项目上传头像
    互联网技术岗笔试面试系列④互联网大厂笔试/面试题目20道
    Allegro Design Entry HDL(OrCAD Capture HDL)软件设计管理图标详细介绍
    变量的引用
    MySQL之SQL语句优化
    芯海转债,恒逸转2上市价格预测
    【C++】右值引用
    239. 滑动窗口最大值
    【计算机网络】网络原理
    BUUCTF 乌镇峰会种图 1
  • 原文地址:https://blog.csdn.net/jialiu111111/article/details/132823833