目录

阿里云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标签。

bash 复制代码
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

说明

上述命令仅会开启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服务器。

bash 复制代码
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

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标签

bash 复制代码
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"
本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
云上艺旅16 小时前
K8S学习之基础七十四:部署在线书店bookinfo
学习·云原生·容器·kubernetes
ghostwritten18 小时前
Run Milvus in Kubernetes with Milvus Operator
容器·kubernetes·milvus
你觉得20519 小时前
浙江大学朱霖潮研究员:《人工智能重塑科学与工程研究》以蛋白质结构预测为例|附PPT下载方法
大数据·人工智能·机器学习·ai·云计算·aigc·powerpoint
久违の欢喜19 小时前
《云端变革:云计算重塑现代企业架构的实践之路》
架构·云计算
Linux运维老纪19 小时前
运维之 Centos7 防火墙(CentOS 7 Firewall for Operations and Maintenance)
linux·安全·centos·云计算·运维开发·火绒
duration~20 小时前
K8S自定义CRD
容器·贪心算法·kubernetes
小马爱打代码1 天前
Kubernetes 中部署 Ceph,构建高可用分布式存储服务
分布式·ceph·kubernetes
云上艺旅1 天前
K8S学习之基础六十八:Rancher创建deployments资源
学习·云原生·容器·kubernetes·rancher
rider1891 天前
【4】搭建k8s集群系列(二进制部署)之安装master节点服务(kube-apiserver)
云原生·容器·kubernetes
yuzhangfeng1 天前
【云计算物理网络】从传统网络到SDN:云计算的网络演进之路
网络·云计算