在 k8s 中配置域名解析
在应用开发中,我们不应把远程服务的 ip 硬编码到应用中。有些同学习惯使用域名来标定远程服务,通过修改解析,来区分开发测试和生产环境,这是一个挺好的习惯。
在 k8s 系统中,我们使用服务名来调用服务,并通过 coredns 来进行解析。但那些集群外的服务,并且已经被硬编码的域名如何访问呢?
方法1:修改容器的 hosts
设想:把 hosts 文件内容存储在 configmap 中,通过 volume 绑定到 /etc/hosts。但很不幸,/etc/hosts 被 k8s 征用了,无法修改。
但 k8s 给我们提供了 hostAliases 来解决此问题。
apiVersion: apps/v1
kind: Deployment
metadata:name: hosts-appendlabels: app: hosts-append
spec:replicas: 1selector:matchLabels:app: hosts-appendtemplate:metadata:labels:app: hosts-appendspec:hostAliases:- ip: "127.0.0.1"hostnames:- "foo.local"- "bar.local"- ip: "10.1.2.3"hostnames:- "foo.remote"- "bar.remote"containers:- image: nginx:alpinename: hosts-appendports:- containerPort: 80protocol: TCP
部署后,pod 里面的 hosts 文件已经追加了解析记录。结果如下:
$ kubectl exec hosts-append-5576848dcf-jnt4s -- cat /etc/hosts# Kubernetes-managed hosts file.
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.4.0.224 hostbiza-5576848dcf-jnt4s# Entries added by HostAliases.
127.0.0.1 foo.local bar.local
10.1.2.3 foo.remote bar.remote
此方法的缺点是:不同环境下的域名映射是不一样的,我必须为环境编写不同的 yaml 文件。
方法2:使用私有dns解析
k8s 内部默认已经安装了 coredns 服务,可以通过修改 coredns 的配置来达到内部解析的目的。
coredns 的配置写在了 configmap 的 kube-system 命名空间下的 coredns 配置节点了。只需要增加 hosts 配置节点就好。
编辑他:
kubectl edit cm -n kube-system coredns
Corefile 配置示例(其中 hosts 节点是自定义的解析节点):
.:53 {errorshealthkubernetes cluster.local. in-addr.arpa ip6.arpa {pods insecureupstreamfallthrough in-addr.arpa ip6.arpa}hosts {127.0.0.1 foo.local8.8.8.8 foo.remotefallthrough}prometheus :9153proxy . /etc/resolv.confcache 30reloadloadbalance}
修改完成后,要等等。配置下发完成即可生效。可以进入 pod 内部 ping 一下域名看看。
在一般的控制台,这个节点无法修改。但借助命令行 kubectl 或者其他可视化工具(如 Lens),可以修改这个配置节点。
至于开发环境下的域名解析,自己改本机 hosts 就好啦。
当然,更好的做法是把配置文件与应用解耦,所有的配置,包括远程服务的域名或 ip 都可以被远程修改。
在 k8s 中配置域名解析相关推荐
- k8s中Pod域名解析失败
原文 系统环境 CoreDNS 版本:1.6.7 Docker 版本:19.03.8 Kubernetes 版本:1.18.4 操作系统版本:CentOS 7.4 CentOS 内核版本:3.10.0 ...
- k8s中配置namespace的最小和最大内存
命名空间中运行的容器使用的内存的最小值和最大值. 你可以在 LimitRange 对象中指定最小和最大内存值.如果 Pod 不满足 LimitRange 施加的约束,则无法在命名空间中创建它. 创建n ...
- 在k8s中通过CoreDNS进行域名解析的其中三种方法
1.CoreDNS概述 CoreDNS是一种新的DNS服务器,它开发的初衷主要是用于Linux和docker的配合使用,自kubernetes 1.11版本开始,CoreDNS取代原来的KubeDNS ...
- 【K8S实战系列-nignx-2】k8s中configmap挂载配置nginx.conf
[K8S实战系统-nignx-2]k8s中configmap挂载配置nginx.conf 1. ConfigMap是什么 ConfigMap作用是存储不加密的数据到etcd中,让Pod以变量或数据卷V ...
- 【好文收藏】k8s中Pod 无法正常解析域名:部署 DNS 调试工具排查
k8s 中 Pod 无法正常解析域名:部署 DNS 调试工具排查 问题描述 最近将 Kubernetes 升级到 1.18.1 版本,不过升级完后,查看工作节点的部分 Pod 无法启动,查看消息全是 ...
- k8s中hostname, hosts文件, DNS和代理问题, service和pod的访问问题
全栈工程师开发手册 (作者:栾鹏) 架构系列文章 验证一个域名的ip地址可以使用 nslookup xx.xx..xx 在kubernets中不同命名空间的服务相互访问 涉及到的是Pod和Servic ...
- k8s部署jar包_学习K8S之路.6--- 在K8S中部署Jenkins,并使用Jenkins打包jar包
一:部署jenkins jenkins官网:https://jenkins.io/download/ jenkins镜像:https://hub.docker.com/r/jenkins/jenkin ...
- k8s中几种port介绍
1.端口所应用位置的不同 port是service的的端口 targetport是pod也就是容器的端口 nodeport是容器所在宿主机的端口(实质上也是通过service暴露给了宿主机,而port ...
- 9 个技巧,解决 K8s 中的日志输出问题
作者 | 元乙 阿里云存储服务技术专家 导读:近年来,越来越多的同学咨询如何为 Kubernetes 构建一个日志系统,或者是来求助在此过程中遇到一系列问题如何解决,授人以鱼不如授人以渔,于是作者想 ...
最新文章
- 免费创办网站_足够好的工程来创办一家互联网公司
- 第二课.PyTorch入门
- 灵活运用ISA的链接转换功能:ISA2006系列之十三
- eclipse中编辑properties文件无法看到中文
- eclipse Indigo Helios Galileo几种版本的意思
- 视频需求超平常数 10 倍,却节省了 60% 的 IT 成本投入是一种什么样的体验?
- 2020.8.26广联达笔试第二题——魔法师四种元素平衡(Python)
- 解决scanf_s函数报错:没有为格式字符串传递足够的参数
- Struts2的Action编写
- 常用Latex表达式符号——组合数学篇
- spring中配置quartz定时器
- MySQL数据库进阶(API的理解、Python对MySQL的接口)
- 缓存问题引发的一系列优化
- 精读-软件测试的艺术之模块测试及更高级别的测试
- php 限定字符长度,PHP中字符串的最大长度是多少?
- 线粒体和叶绿体的基因组特点_线粒体基因组有什么特点?
- ARM9开发板Qt环境的搭建
- RabbitMQ高可用性分析
- 开始数据治理时三个常见的陷阱和解决方法
- 抽卡模拟系统(包含图形界面,结果可存储到数据库中)