提问者:小点点

如何更改使用kubeadm部署的kubernetes 1.9上的group. local默认域?


我想通过在我的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开始。

我错过了什么?


共3个答案

匿名用户

我遇到了一个类似的问题,我一直在移植一个基于微服务的应用程序到库伯内特斯。将内部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