网站首页 > 教程文章 正文
针对一些特殊业务需要通过pod名称或域名直接访问pod内部服务。本文主要提供一种暴露pod域名到公司内网的方案。
技术方案
1、使用coredns基于etcd的域名解析插件
2、单独部署一套server,该server负责接收agent发来的域名记录请求,并将数据写到etcd。
3、在每个k8s集群上启动一个agent,该agent负责watch集群的所有pod,并请求server外部接口将域名与ip记录到etcd中。
4、coredns读取etcd中的域名记录。
方案验证
验证测试coredns基于etcd的域名解析功能
环境要求:一台安装linux操作系统的机器并已安装docker,10.23.34.16
1、部署etcd,本次通过通过容器部署
docker network create app-tier --driver bridge
docker run -d --name etcd-server --network app-tier --publish 2379:2379 --publish 2380:2380 --env ALLOW_NONE_AUTHENTICATION=yes --env ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 bitnami/etcd:latest
2、下载coredns二进制:
https://github.com/coredns/coredns/releases/tag/v1.10.1。并将coredns二进制copy到/usr/bin目录下
3、创建coredns配置文件
mkdir /etc/coredns
vi /etc/coredns/dns.conf ##内容如下
skydns.local {
etcd {
path /skydns
endpoint http://localhost:2379
}
cache
}
k8sqihoo.net {
etcd {
path /k8sqihoo # 跟第5步在etcd写入的key前缀一致
endpoint http://localhost:2379
}
cache
}
. {
forward . /etc/resolv.conf
cache
}
4、启动coredns,执行指令:coredns -conf /etc/coredns/dns.conf &
5、从etcd中写入域名记录
docker exec -it 118d6cadf1b7 /bin/sh #登录etcd容器
etcdctl put /k8sqihoo/net/k8sqihoo/test-bjyt/yctest/pod1 '{"host":"10.216.138.203","ttl":60}' #写入域名记录,域名为pod1.yctest.test-bjyt.k8sqihoo.net,对应的pod-ip为10.216.138.203,也可以使用podName+公司后缀为名。
6、(本地或者其他虚拟机)修改/etc/resolv.conf,增加如下内容
7、测试验证,如下图可以看到通过域名可以ping通ip
整体方案
如上暴露域名的方式已明确,现主要问题是如何将pod域名和ip写入到etcd中。
1、在dns侧需要一个sever服务,该服务对外提供增加删除更新dns记录的接口,
2、在k8s侧需要一个agent用于watch对集群外暴露域名的pod,将podname,namespace等进行拼接组成域名(根据自身需要进行拼接),并将域名与ip传给server服务,记录到etcd中。删除时进行同样请求操作。
使用总结
1、在部署时dns-node可以考虑使用高可用方案,使用vip即可。
2、考虑到资源浪费,dns-node中的etcd可以跟k8s共用一套。
3、考虑到集群pod增删频率过快,导致的dns-node压力过大,可以针对有需要暴露pod域名需求的业务使用,通过pod anntation识别。
4、为使用方便可作为子集域名服务加到公司dns服务中。
猜你喜欢
- 2025-06-09 Kubernetes(k8s)pod详解(k8s pod completed)
- 2025-06-09 超详细!基于k8s+docker+jenkins的一站式 DevOps 环境搭建教程-下
- 2025-06-09 一键部署k8s多、单集群命令(波哥亲测有效)
- 2025-06-09 k8s平台:手动部署Grafana(k8s部署consul)
- 2025-06-09 K8s 应用的网络可观测性: Cilium VS DeepFlow
- 2025-06-09 k8s安全相关特性汇总(k8s的主要组件有哪些?)
- 2025-06-09 K8S集群下的GPU调度(k8s pod调度过程详解)
- 2025-06-09 K8S调试利器:telepresence2使用文档
- 2025-06-09 别被云原生忽悠了:接地气的 K8s 生产落地长这样
- 2025-06-09 不努力提高效率,小姐姐都被人追走了:K8S一键部署了解一下?
- 最近发表
-
- 一课译词:一刀两断(一刀两断成语解释)
- 核心短语break up用法解析(breakd短语)
- HTML+CSS 实现商品图片列表放大视觉效果 复制完整代码即可马上调用
- 前端实现右键自定义菜单(前端实现右键自定义菜单怎么设置)
- Python中docx与docxcompose批量合并多个Word文档并添加分页符
- Java 将Excel转为XML(java将xls转换成xlsx)
- jq+ajax+bootstrap改了一个动态分页的表格
- css兼容性问题及一些常见问题汇总大全,赶快收藏!
- Java 的业务逻辑验证框架 之-fluent-validator
- 小程序cover-view踩坑系列2(微信小程序overflow)
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)