开发者社区> 了哥-duff> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: ### 问题起源 在通过容器化的道路上,很多实践都是运行在一个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服务器

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云上kubernetes的备份和恢复
kubernetes的备份和恢复 Kubernetes集群的运行状态都保存在ETCD中,为了确保您生产环境的稳定性。建议您定期备份。下面为您介绍如何对阿里云容器服务Kubernetes进行备份和恢复。
5630 0
【kubernetes】二进制文件方式安装 Kubernetes 集群(一)
【kubernetes】二进制文件方式安装 Kubernetes 集群(一)
77 0
【kubernetes】二进制文件方式安装 Kubernetes 集群(四)
二进制文件方式安装 Kubernetes 集群(四)
40 0
阿里云上万个 Kubernetes 集群大规模管理实践
阿里云容器服务从2015年上线后,一路伴随并支撑双十一发展。在2019年的双十一中,容器服务ACK除了支撑集团内部核心系统容器化上云和阿里云的云产品本身,也将阿里多年的大规模容器技术以产品化的能力输出给众多围绕双十一的生态公司和ISV公司。通过支撑来自全球各行各业的容器云,容器服务已经沉淀了支持单元化架构、全球化架构、柔性架构的云原生应用托管中台能力,管理了超过1W个以上的容器集群。本文会介绍下容器服务ACK在海量k8s集群管理上的实践经验。
669 0
容器服务kubernetes federation v2实践二:基于FederatedSecrets管理多集群TLS证书
概要 随着网络安全越来越重要,越来越多的网站都使用HTTPS/TLS来加强访问安全。在federation v2联邦集群中,可以使用FederatedSecrets来管理多个k8s集群的证书,下面简单介绍在阿里云容器服务下使用FederatedSecrets管理TLS证书。
1769 0
容器服务kubernetes federation v2实践一:基于External-DNS的多集群Ingress DNS实践
概要 External-DNS提供了编程方式管理Kubernetes Ingress资源的DNS的功能,方便用户从Ingress管理DNS解析记录。而在kubernetes federation v2环境中,使用External-DNS可以快速的管理多个联邦集群的Ingress DNS解析,降低用户的操作成本。
3944 0
kubernetes集群架构解读
1. kubernetes总架构图 2. kubernetes 各组件介绍 2.1 Master 节点 Master是kubernetes的大脑,运行的Deamon 服务包括kube-apiserver、kube-scheduler、kube-contronller- manager、etcd和pod网络 2.1.1 各组件介绍 API Server(kube-apiserver) API Server提供HTTP/HTTPS RESTful API,即Kubernetes API。
2227 0
二进制包20分钟快速安装部署 Kubernetes v1.14.0 集群
二进制包20分钟快速部署 Kubernetes v1.14.0 集群 一 环境 |操作系统|Docker版本|Kubernetes版本|Etcd版本|Flannel版本||:-:|:-:|:-:|:-:|:-:||CentOS Linux release 7.
1801 0
Kubernetes集群支持VPC多路由表
背景 Kubernetes通过CloudProvider(又称CCM)组件在VPC路由表中添加合适的路由来打通集群中Pod之间的网络连接。近期VPC发布了对多个路由表的支持能力,让用户可以自行选择ECS关联哪些路由表,为用户提供了丰富的路由管理能力。
2076 0
在Kubernetes集群中通过LocalVolume Provisioner使用本地盘
介绍 阿里云在部分ECS类型中提供了本地盘配置,本地盘具有低时延、高随机IOPS、高吞吐量和高性价比的优势,在一些对性能要求很高的应用中有很大优势。 在Kubernetes系统中使用本地盘可以通过HostPath、LocalVolume等类型的PV使用: HostPath: 卷本身不带有调度信息,如果想对每个pod固定在某个节点上,就需要对pod配置nodeSelector等调度信息; LocalVolume: 卷本身包含了调度信息,使用这个卷的pod会被固定在特定的节点上,这样可以很好的保证数据的连续性。
4767 0
+关注
了哥-duff
游走于产品与架构间,关注容器、Kubernetes,微服务,ServiceMesh
18
文章
0
问答
来源圈子
更多
容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级 Kubernetes 容器化应用的全生命周期管理。容器服务 Kubernetes 版简化集群的搭建和扩容等工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的 Kubernetes 容器化应用运行环境。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载