在 Kubernetes 集群中通过 dns-admission-controller 来调整 Pod dns 配置

简介: 本文介绍 dns-admission-controller 组件,通过 mutating webhook 机制能够在集群级别自动调整 pod 的 dns 配置,灵活性强、侵入性低。

上文介绍了 Kubernetes 集群 DNS 服务发现原理

但在某些场景下,我们希望能够更灵活调整 Pod 默认的 dns 配置,如:

  1. 调小 ndots 的值以减少冗余的域名查询请求,以提高查询效率。
  2. 集群部署了 local-dns,调整 Pod 的 nameserver 接入 local-dns。

通常,你需要重配置集群 kubelet 的启动参数,或者给应用 YAML 配置 dnsConfig 来达到目的,但是侵入性较强。

本文会介绍 dns-admission-controller 组件,通过 mutating webhook 机制能够在集群级别自动调整 pod 的 dns 配置,灵活性强、侵入性低。

手动部署 dns-admission-controller

参数确定

设定集群的 kube-dns 服务 IP 为 172.21.0.10,集群主域名后缀为 cluster.local。首先,需要确定需要调整的 dns 配置。

参数 说明
nameserver dns 服务的 IP。如果不希望调整,则需要为集群 kube-dns 服务 IP
clusterDomain 集群主域名后缀
ndots ndots 值,默认为 3

部署

  1. 以调小 ndots 值到 2 为目的示范部署流程,通过下载 helm chart 应用来一键部署应用。
export clusterDomain=cluster.local
export nameserver=172.21.0.10
export ndots=2

curl https://node-local-dns.oss-cn-hangzhou.aliyuncs.com/install_dns-admission-controller.sh -o install_dns-admission-controller.sh;chmod 744 install_dns-admission-controller.sh;bash install_dns-admission-controller.sh $clusterDomain $nameserver $ndots
  1. 查看是否安装成功:
$ helm list -n kube-system
NAME                            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                                             APP VERSION
dns-admission-controller        kube-system     1               2020-11-29 22:39:56.833004 +0800 CST    deployed        ack-node-local-dns-admission-controller-0.0.1                
$ kubectl get deployment dns-admission-controller -n kube-system
NAME                                      READY   UP-TO-DATE   AVAILABLE   AGE
dns-admission-controller   1/1     1            1           109s

接入

  1. 给需要接入的命名空间打标(以 default 为例)
kubectl label namespace default node-local-dns-injection=enabled

注:admission-controller 会忽略 kube-system 和 kube-public 命名空间下的应用。

  1. 在集群的 default 命名空间下部署以下测试应用
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: ubuntu
  labels:
    app: ubuntu
spec:
  replicas: 2
  selector:
    matchLabels:
      app: ubuntu
  template:
    metadata:
      labels:
        app: ubuntu
    spec:
      containers:
      - name: ubuntu
        image: ubuntu
        command: ["sh", "-c"]
        args: ["sleep 100000"]
$ kubectl apply -f ubuntu-deployment.yaml
deployment.apps/ubuntu created

$ kubectl get deployment ubuntu
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
ubuntu   2/2     2            2           7s
  1. 查看 dnsConfig 是否注入成功
$ kubectl get pods
NAME                      READY   STATUS    RESTARTS   AGE
ubuntu-766448f68c-mj8qk   1/1     Running   0          4m39s
ubuntu-766448f68c-wf5hw   1/1     Running   0          4m39s
$ kubectl get pod ubuntu-766448f68c-mj8qk -o=jsonpath='{.spec.dnsConfig}'
map[nameservers:[172.21.0.10] options:[map[name:ndots value:2]] searches:[default.svc.cluster.local svc.cluster.local cluster.local]]
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
14天前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
93 1
|
21天前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
179 89
|
6月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
233 9
|
6月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
4月前
|
人工智能 缓存 Kubernetes
ACK GIE配置建议
Gateway with Inference Extension是基于Kubernetes社区Gateway API及其扩展规范实现的增强型组件,支持四层/七层路由服务,并面向生成式AI推理场景提供负载均衡优化、服务管理简化等能力,适用于AI推理服务的高可用部署与性能优化。在不同的场景使用ACK Gateway with Inference Extension时,可能需要根据业务需求和高可用需要对网关和推理扩展进行不同的配置调整。本文主要介绍在实际业务场景中针对ACK GIE的配置建议,以获得更好的使用效果。
222 23
|
6月前
|
域名解析 应用服务中间件 Shell
使用nps配置内网穿透加域名解析
使用nps配置内网穿透加域名解析
718 76
|
8月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
725 33
|
应用服务中间件 调度 nginx
Kubernetes-项目中pod调度使用法则
前言kubernetes中部署的pod默认根据资源使用情况自动调度到某个节点。可在实际项目的使用场景中都会有更细粒度的调度需求,比如:某些pod调度到指定主机、某几个相关的服务的pod最好调度到一个节点上、Master节点不允许某些pod调度等。
2155 0
|
Kubernetes 应用服务中间件 调度
Kubernetes之Pod调度
Kubernetes调度器根据特定的算法与策略将pod调度到工作节点上。在默认情况下,Kubernetes调度器可以满足绝大多数需求,例如调度pod到资源充足的节点上运行,或调度pod分散到不同节点使集群节点资源均衡等。
1539 0
|
Kubernetes 应用服务中间件 调度
Kubernetes之Pod调度
本文讲的是Kubernetes之Pod调度【编者的话】Kubernetes调度器根据特定的算法与策略将pod调度到工作节点上。在默认情况下,Kubernetes调度器可以满足绝大多数需求,例如调度pod到资源充足的节点上运行,或调度pod分散到不同节点使集群节点资源均衡等。
2918 0

相关产品

  • 云解析DNS
  • 推荐镜像

    更多