5种容器内指定特定域名解析结果的方式
本文分享自华为云社区《容器内指定特定域名解析结果的几种方式》,作者:张俭。
在本篇文章中,我们将探讨如何在容器内指定特定域名解析结果的几种方式。为了方便演示,首先我们创建一个演示用的Deployment配置文件。
apiVersion: apps/v1 kind: Deployment metadata: name: busybox-deployment labels: app: busybox spec: replicas: 1 selector: matchLabels: app: busybox template: metadata: labels: app: busybox spec: containers: - name: busybox image: busybox args: - /bin/sh - -c - "while true; do echo Hello, Kubernetes!; sleep 10;done"
这个deployment会创建1个busybox的pod,容器每隔10s会打印“Hello, Kubernetes!”到控制台
TL;DR
方案 | 修改级别 | 是否推荐 | 备注 |
---|---|---|---|
修改/etc/hosts | pod | 否 | |
添加HostAliases记录 | pod/deploy/statefulset | 是 | |
修改Coredns配置 | 整个kubernetes集群 | 是 | |
自定义DNS策略 | pod/deploy/statefulset | 视情况而定 | 如需对接三方的DNS服务器,推荐采用 |
使用三方DNS插件 | 整个kubernetes集群 | 否 | 不推荐,Coredns为业内主流 |
修改/etc/hosts
修改/etc/hosts是最传统的方式,直接在容器内修改相应的文件来实现域名解析,在Pod级别生效。由于其可维护性较差(每次pod发生重启都需要手动修改),不推荐在生产环境使用。
例如,我们可以在/etc/hosts里面添加这样一条记录
250.250.250.250 four-250
/ # ping four-250 PING four-250 (250.250.250.250): 56 data bytes
添加HostAliases记录
HostAliases是kubernetes中Pod配置的一个字段,它提供了Pod内容器的/etc/hosts
文件的附加记录。这在某些情况下非常有用,特别是当你想要覆盖某个主机名的解析结果,或者提供网络中没有的主机名解析时。
这个可以在Pod、Replica、Deployment、StatefulSet的级别修改,维护性稍强。举个🌰,我们将上面的yaml修改为
apiVersion: apps/v1 kind: Deployment metadata: name: busybox-deployment labels: app: busybox spec: replicas: 3 selector: matchLabels: app: busybox template: metadata: labels: app: busybox spec: hostAliases: - ip: "250.250.250.250" hostnames: - "four-250" containers: - name: busybox image: busybox args: - /bin/sh - -c - "while true; do echo Hello, Kubernetes!; sleep 10;done"
这个时候我们查看容器的/etc/hosts,发现它被kubernetes自动插入了一条记录**Entries add by HostAliases。**这就是hostAliases的实现原理
在kubelet_pods代码中进行了这样的写入动作
func hostsEntriesFromHostAliases(hostAliases []v1.HostAlias) []byte { if len(hostAliases) == 0 { return []byte{} } var buffer bytes.Buffer buffer.WriteString("\n") buffer.WriteString("# Entries added by HostAliases.\n") // for each IP, write all aliases onto single line in hosts file for _, hostAlias := range hostAliases { buffer.WriteString(fmt.Sprintf("%s\t%s\n", hostAlias.IP, strings.Join(hostAlias.Hostnames, "\t"))) } return buffer.Bytes() }
Coredns配置
我们可以通过修改ConfigMap来实现让容器解析特定域名的目的。
更改Coredns配置
我们可以通过以下命令修改Coredns的配置:
kubectl edit cm coredns -n kube-system
原有的configmap
Corefile: | .:53 { log errors health { lameduck 5s } ready kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa ttl 30 } prometheus :9153 hosts { 192.168.65.2 host.minikube.internal fallthrough } forward . /etc/resolv.conf { max_concurrent 1000 } cache 30 loop reload loadbalance }
在hosts里面加上特定的记录
250.250.250.250 four-250
如果您没有配置reload插件,则需要重启Coredns才能生效,默认的reload时间是30s,在plugin/reload/setup.go的defaultInterval中定义
自定义DNS策略
通过修改DNS策略。使得对于单个Pod/Deploy/StatefulSet将特定的域名解析发给特定的服务器来达到效果,如下,可以对pod添加dns的服务器以及search域
spec: dnsConfig: nameservers: - 1.2.3.4 searches: - search.prefix containers: - name: busybox image: busybox args: - /bin/sh - -c - "while true; do echo Hello, Kubernetes!; sleep 10;done"
使用第三方DNS插件
不推荐,使用其他的DNS插件,来做一些炫酷的自定义操作。而且目前Coredns也是业内的主流,没有很好的替代。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何做到人均告警减少 90%?B 站新一代告警平台的设计与实践
一分钟精华速览 B 站的业务规模和用户群体不断扩大,对于服务的稳定性和可用性的要求也日益增高。这就需要 B 站的监控告警系统能够及时、准确地发现和定位问题,以便尽快解决,维护好用户的使用体验。 本文是对 B 站在告警监控系统上的一次重要迭代和优化的详细记录。文章详细阐述了 B 站对告警平台设计思路和优化迭代,以及在实现过程中遇到的问题和解决方法。特别是对于告警定位的精准性和定位效率的提升,文章给出了新的设计方案和实践方法。 作者介绍 哔哩哔哩资深开发工程师——王程田 TakinTalks 稳定性社区专家团成员,哔哩哔哩资深开发工程师。2020 年加入 B 站先后负责事件平台,链路追踪,AIOps 及告警平台方向技术演进 &平台迭代。完成了新一代告警平台落地,达成了 99 分位一分钟内的异常端到端发现,实现了人均告警从每周 1000+条/人到 70+条/人告警治理上的突破。 温馨提醒:本文约 6000 字,预计花费 8 分钟阅读。 TakinTalks稳定性社区后台回复 “交流” 进入读者交流群;回复“1130”获取课件; 背景 在 B 站的多元化业务中,告警平台起着至关重要的作...
- 下一篇
RocketMQ 5.X PopAck 源码拆解
目录 一、RocketMQ 5.X架构 RocketMQ 5.X 架构 RocketMQ 5.X 为什么发明 Pop 二、Pop流程 Pop 流程 锁 Consumer Queue 计算 Pop Offset 读取消息 添加 Check Point 释放 Consumer Queue 锁 Pop 关键数据结构介绍 Pop Offset Check Point ReceiptHandle StartOffsetInfo MsgOffsetInfo OrderCountInfo 三、Ack流程 Proxy 提交 Ack 请求 内存标记消费进度 持久化 Ack 到 Revive Topic 异步标记消费进度 可见时间过后,消息恢复消费 四、结语 RocketMQ 5.X 架构 RocketMQ 已经开启 5.X 时代,4.X 已成为 LTS 版本。 各大云厂商也推出支持 RocketMQ 5.X 版本的产品,在介绍 Pop,Ack 之前需要先了解 RocketMQ 5.X的架构。 1. RocketMQ 5.X 架构 如上图,在 RocketMQ 5.X 的架构中,新增组件如下: 02 Co...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7,8上快速安装Gitea,搭建Git服务器