背景
在业务应用开发中, 经常会有自定义域名的需求, 比如: 使用自建的dns在解析内部域名, 或者添加hosts。如何在TKE中实现这个场景呢?
方案1: 修改容器hosts
对于自定义域名数量少的场景下,可以使k8s的hostAliases
字段来解决这个问题,对整个系统影响面积比较小。
配置示例:
比如我们需要添加一下域名解析:
- 127.0.0.1 foo.local bar.local
- 10.1.2.3 foo.remote bar.remote
apiVersion: apps/v1
kind: Deployment
metadata:
name: hosts-append
labels:
app: hosts-append
spec:
replicas: 1
selector:
matchLabels:
app: hosts-append
template:
metadata:
labels:
app: hosts-append
spec:
hostAliases:
- ip: "127.0.0.1"
hostnames:
- "foo.local"
- "bar.local"
- ip: "10.1.2.3"
hostnames:
- "foo.remote"
- "bar.remote"
containers:
- image: nginx:alpine
name: hosts-append
ports:
- containerPort: 80
protocol: TCP
部署完成后, 登陆到容器内进行验证:
- 查看/etc/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
这种方式有个缺点就是针对worload去配置,如果worload比较多的话就比较繁琐了,可以使用下面的方式来解决。
方案2: coredns 中添加私有域解析和hosts解析
在k8s中域名解析组件是coredns, 其配置使用的是configmap,可以比较方便的添加自定义域名, coredns的configmap 在kube-system 的命名空间下,修改方式如下:
代码语言:txt复制kubectl edit cm -n kube-system coredns
Corefile 配置示例:
代码语言:txt复制 .:53 {
errors
health
kubernetes cluster.local. in-addr.arpa ip6.arpa {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
}
hosts {
127.0.0.1 foo.local
8.8.8.8 foo.remote
fallthrough
}
test.local:53 {
errors
cache 30
forward . 10.150.0.1
}
prometheus :9153
proxy . /etc/resolv.conf
cache 30
reload
loadbalance
}
修改完成后, 需要等待几秒,配置同步完成后即可生效,此时可以进入到容器进行域名验证。
在一般的控制台,这个节点无法修改。但借助命令行 kubectl 或者其他可视化工具(如 Lens),可以修改这个配置节点。
至于开发环境下的域名解析,自己改本机 hosts 就好啦。
当然,更好的做法是把配置文件与应用解耦,所有的配置,包括远程服务的域名或 ip 都可以被远程修改