阿里云Kubernetes配置外部DNS的方式

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: ### 问题起源 在通过容器化的道路上,很多实践都是运行在一个hybrid的环境里,也就是有部分程序在容器中,也有部分在VM或者物理机中,这个也是可以理解的,毕竟技术不能总放在一个篮子里,不然运维的人要崩溃的。

问题起源

在通过容器化的道路上,很多实践都是运行在一个hybrid的环境里,也就是有部分程序在容器中,也有部分在VM或者物理机中,这个也是可以理解的,毕竟技术不能总放在一个篮子里,不然运维的人要崩溃的。在这样的环境下,很多企业原有的应用都是通过DNS访问的,那么容器里的应用是如何访问到这些应用的呢?在阿里云的Kubernetes里默认配置使用了KubeDNS(在后面的版本将被CoreDNS代替,敬请期待),这个KubeDNS的上行DNS服务器,直接使用了阿里云的DNS服务,从而在默认情况下无法通过DNS的方式访问到企业的这些服务。

解决之道

阿里云的Kubernetes始终保持着对于Kuberbetes的一致性以及可移植性,所以可以直接参考Kubernetes的官方文档:https://kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/。主要思路是通过添加KubeDNS的上游DNS服务器来解决。这里具体演示如何在阿里云的Kubernetes设置上游DNS服务。

具体实践

Kubedns的组件基本介绍:

KubeDNS是Kubernetes的add-on组件,主要提供容器的DNS服务,他包含了一下组件在一个Pod中:

  • kubedns: 监听k8s api server,在内存中维护DNS的记录同时响应DNS的请求
  • dnsmasq: 增加DNS缓存来提高性能,查错主要通过这个组件来日志来判断。
  • sidecar: 提供了一个统一的健康检查接口来执行对其它上面两个组件的健康检查

Kubelet的相关配置

DNS和Kubelete相关的配置有两个:

  • --cluster-dns=<dns-service-ip> 指定容器使用的dns,因为使用了kubeDNS,这里配置的是kuebDNS的clusterip
  • --cluster-domain=<default-local-domain> k8s内部使用的域名后缀。默认值是:cluster.local。目前不建议更改这个值。

配置上游DNS来支持企业内服务DNS服务器

通过kubectl describe kube-dns -n kube-system可以看到,kubedns的启动参数需要使用--config-dir=/kube-dns-config来读取配置文件,而这个配置是通过一个名为kube-dns的configmap获取的,所以我们只需要配置这个configmap就好

kubectl create configmap/kube-dns -n kube-system 

kubectl edit configmap/kube-dns -n kube-system

然后在data下添加对应的内容,例如:

upstreamNameservers: '["8.8.8.8", "100.100.2.136"]'

这里"8.8.8.8"和 "100.100.2.136"就是上游对应的DNS服务器了。

这里需要注意的是,变更了configmap,容器是无法感知的,这个也是我对configmap吐槽最多的地方。要使这个配置生效,只能去delete对应kube-dns的容器,让其重启来获取对应新的配置:

kubectl delete pod/<kube-dns-xxx> -n kube-system

这样我们就配置好了对应的上游服务器DNS了,容器内的应用就可以通过域名的方法来访问集群外的其它企业应用了。

填坑小记:

  • 在阿里云中注意注意安全组的设置,因为kubeDNS是标准的DNS借口,所以主机间需要开放UDP 53端口,如果你发现可以 ping通ip,但是不能ping通域名,很可能就是这个问题了
  • 需要查看kubedns是否已经激活对应的上游dns,可以用如下命令查日志:kubectl logs <kubedns pod> -c dnsmasq -n kube-system
    如图:

Snip20180706_111.png

从而判断是否配置了上游的DNS服务器

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
6天前
|
数据采集 消息中间件 监控
Flume数据采集系统设计与配置实战:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入探讨Apache Flume的数据采集系统设计,涵盖Flume Agent、Source、Channel、Sink的核心概念及其配置实战。通过实例展示了文件日志收集、网络数据接收、命令行实时数据捕获等场景。此外,还讨论了Flume与同类工具的对比、实际项目挑战及解决方案,以及未来发展趋势。提供配置示例帮助理解Flume在数据集成、日志收集中的应用,为面试准备提供扎实的理论与实践支持。
21 1
|
21天前
|
域名解析 移动开发 负载均衡
阿里云DNS常见问题之DNS负载均衡调加权模式失败如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
21天前
|
缓存 Kubernetes 网络协议
阿里云DNS常见问题之在手机上使用阿里的私人dns失败如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
21天前
|
tengine 网络协议 API
阿里云DNS常见问题之DNS中alidns的api调用失败如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
21天前
|
弹性计算
2024年阿里云服务器不同实例规格与配置实时优惠价格整理与分享
2024年阿里云服务器的优惠价格新鲜出炉,有特惠云服务器也有普通优惠价格,本文为大家整理汇总了2024年阿里云服务器的优惠价格,包含特惠云服务器和其他配置云服务器的优惠价格。以便大家了解自己想购买的云服务器选择不同实例规格和带宽情况下的价格,仅供参考。
2024年阿里云服务器不同实例规格与配置实时优惠价格整理与分享
|
3天前
|
存储 弹性计算 安全
阿里云服务器2核2G、2核4G配置最新租用收费标准及活动价格参考
2核2G、2核4G配置是很多个人和企业建站以及部署中小型的web应用等场景时首选的云服务器配置,这些配置的租用价格也是用户非常关心的问题,本文为大家整理汇总了2024年阿里云服务器2核2G、2核4G配置不同实例规格及地域之间的收费标准,同时整理了这些配置最新活动价格,以供大家参考和选择。
阿里云服务器2核2G、2核4G配置最新租用收费标准及活动价格参考
|
6天前
|
域名解析 网络协议 应用服务中间件
阿里云服务器配置免费https服务
阿里云服务器配置免费https服务
|
17天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
14 0
|
20天前
|
网络协议 Linux 网络安全
Linux服务器DNS服务器配置实现bind的正向解释和反向解释
Linux服务器DNS服务器配置实现bind的正向解释和反向解释
17 0
|
21天前
|
存储 缓存 负载均衡
阿里云DNS常见问题之域名DNS跳转有问题如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多