我想通过在我的DNS服务器上添加一个存根区域来从库伯内特斯集群外部解析库贝-dns名称。这需要将group. local域更改为适合我的DNS命名空间的东西。
群集DNS是正常工作与聚类. local.要更改域,我已经修改了行KUBELET_DNS_ARGS /etc/systemd/system/kubelet.service.d/10-kubeadm.conf阅读:
Environment="KUBELET_DNS_ARGS=--cluster-dns=x.y.z --cluster-domain=cluster.mydomain.local --resolv-conf=/etc/resolv.conf.kubernetes"
重新启动kubelet后,外部名称是可解析的,但kubernetes名称解析失败。
我可以看到库贝-dns仍在运行:
/kube-dns --domain=cluster.local. --dns-port=10053 --config-dir=/kube-dns-config --v=2
我唯一能找到club. local的地方是在pods yaml配置中,它写道:
containers:
- args:
- --domain=cluster.local.
- --dns-port=10053
- --config-dir=/kube-dns-config
- --v=2
修改yaml并重新创建pod后,使用
kubectl replace --force -f kube-dns.yaml
我仍然看到库贝-dns gettings以--domain=group. local开始。
我错过了什么?
我遇到了一个类似的问题,我一直在移植一个基于微服务的应用程序到库伯内特斯。将内部DNS区域更改为group. local将是一项相当复杂的任务,我们并不真正想处理。
在我们的例子中,我们从KubeDNS切换到CoreDNS,并简单地启用了coreDNS重写插件,以将我们的our.内. domain
翻译为ourNamesspace.svc.club.local
。
完成此操作后,我们的CoreDNS配置图的corefile部分如下所示:
data:
Corefile: |
.:53 {
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
rewrite name substring our.internal.domain ourNamespace.svc.cluster.local
proxy . /etc/resolv.conf
cache 30
}
这使我们的kubernetes服务能够响应默认DNS区域和我们自己的区域。
我假设您正在使用CoreDNS。
您可以通过编辑所有节点上的kubelet配置文件来更改群集基础DNS,该文件位于此处/var/lib/kubelet/config. yaml
或在kubeadm init
期间设置群集域。
改变
clusterDomain: cluster.local
到:
clusterDomain: my.new.domain
现在您还需要更改CoreDNS配置。CoreDNS为此使用ConfigMap。您可以通过运行来获取当前的CoreDNS ConfigMap
kubectl get -n kube-system cm/coredns -o yaml
然后改变
kubernetes cluster.local in-addr.arpa ip6.arpa {
...
}
要像这样匹配您的新域:
kubernetes my.new.domain in-addr.arpa ip6.arpa {
...
}
现在将更改应用于CoreDNS ConfigMap。如果您重新启动kubelet和CoreDNS pod,那么您的集群应该使用新域。
例如,如果您有一个名为grafana服务的服务,现在可以使用以下地址访问它:grafana-service.default.svc.my.new. domain
# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana-service ClusterIP <Internal-IP> <none> 3000/TCP 100m
# nslookup grafana-service.default.svc.my.new.domain
Server: <Internal-IP>
Address 1: <Internal-IP> kube-dns.kube-system.svc.my.new.domain
Name: grafana-service.default.svc.my.new.domain
Address 1: <Internal-IP> grafana-service.default.svc.my.new.domain
我部署了入口控制器的内部实例,并将CNAME添加到coreDNS配置中。部署内部nginx-ingress
helm install int -f ./values.yml stable/nginx-ingress --namespace ingress-nginx
value. yaml:
controller:
ingressClass: 'nginx-internal'
reportNodeInternalIp: true
service:
enabled: true
type: ClusterIP
要编辑coreDNS配置:KUBE_EDITOR=nankubectl编辑config map coredns-n库贝-system
我的coredns文件:
apiVersion: v1
data:
Corefile: |
.:53 {
reload 5s
log
errors
health {
lameduck 5s
}
ready
template ANY A int {
match "^([^.]+)\.([^.]+)\.int\.$"
answer "{{ .Name }} 60 IN CNAME int-nginx-ingress-controller.ingress-nginx.svc.cluster.local"
upstream 127.0.0.1:53
}
template ANY CNAME int {
match "^([^.]+)\.([^.]+)\.int\.$"
answer "{{ .Name }} 60 IN CNAME int-nginx-ingress-controller.ingress-nginx.svc.cluster.local"
upstream 127.0.0.1:53
}
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
forward . "/etc/resolv.conf"
cache 30
loop
reload
loadbalance
}
kind: ConfigMap
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","data":{"Corefile":".:53 {\n errors\n health {\n lameduck 5s\n }\n ready\n kubernetes >
creationTimestamp: "2020-02-27T16:02:20Z"
name: coredns
namespace: kube-system
resourceVersion: "16293672"
selfLink: /api/v1/namespaces/kube-system/configmaps/coredns
uid: 8f0ebf84-6451-4f9b-a6e1-c386d44f2d43
如果您现在添加到入口资源… int域,并添加适当的注释以使用nginx-内部入口,您可以拥有更短的域,例如您可以在jenkins helm图表中这样配置它:
master:
ingress:
annotations:
kubernetes.io/ingress.class: nginx-internal
enabled: true
hostName: jenkins.devtools.int