首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改kubeadm部署的kubernetes1.9上的cluster.local默认域?

如何更改kubeadm部署的kubernetes1.9上的cluster.local默认域?
EN

Stack Overflow用户
提问于 2018-01-19 01:08:11
回答 6查看 10K关注 0票数 7

我想通过向我的DNS服务器添加一个存根区域,从Kubernetes集群外部解析kube-dns名称。这需要将DNS域更改为适合我的cluster.local名称空间的名称。

集群DNS与cluster.local配合工作得很好。要更改域,我将/etc/systemd/system/kubelet.service.d/10-kubeadm.conf上的KUBELET_DNS_ARGS行修改为:

代码语言:javascript
复制
Environment="KUBELET_DNS_ARGS=--cluster-dns=x.y.z --cluster-domain=cluster.mydomain.local --resolv-conf=/etc/resolv.conf.kubernetes"

重启kubelet后,外部名称可以解析,但kubernetes名称解析失败。

我可以看到kube-dns仍然在运行:

代码语言:javascript
复制
/kube-dns --domain=cluster.local. --dns-port=10053 --config-dir=/kube-dns-config --v=2

我能够找到cluster.local的唯一位置是在pods yaml配置中,它是这样写的:

代码语言:javascript
复制
  containers:
  - args:
    - --domain=cluster.local.
    - --dns-port=10053
    - --config-dir=/kube-dns-config
    - --v=2

修改yaml并使用以下命令重新创建pod之后

代码语言:javascript
复制
kubectl replace --force -f kube-dns.yaml

我仍然看到kube-dns gettings以--domain=cluster.local开头。

我遗漏了什么?

EN

回答 6

Stack Overflow用户

发布于 2018-06-08 21:44:12

我在将一个基于微服务的应用程序移植到Kubernetes时遇到了类似的问题。将内部DNS区域更改为cluster.local将是一项相当复杂的任务,我们并不真正想要处理。

在我们的例子中,我们使用switched from KubeDNS to CoreDNS,并简单地使coreDNS rewrite plugin能够将我们的our.internal.domain转换为ourNamespace.svc.cluster.local

完成此操作后,我们的CoreDNS配置映射的核心文件部分如下所示:

代码语言:javascript
复制
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区域和我们自己的区域上进行响应。

票数 11
EN

Stack Overflow用户

发布于 2020-04-25 21:45:36

我部署了入口控制器的内部实例,并将CNAME添加到coreDNS配置中。部署内部nginx-ingress

代码语言:javascript
复制
helm install int -f ./values.yml stable/nginx-ingress --namespace ingress-nginx

values.yaml:

代码语言:javascript
复制
controller:
  ingressClass: 'nginx-internal'
  reportNodeInternalIp: true
  service:
    enabled: true
    type: ClusterIP

编辑coreDNS配置:KUBE_EDITOR=nano kubectl edit configmap coredns -n kube-system

我的核心文件:

代码语言:javascript
复制
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-internal入口,您可以拥有更短的域,例如,您可以在jenkins helm chart中这样配置它:

代码语言:javascript
复制
master:
  ingress:
    annotations:
      kubernetes.io/ingress.class: nginx-internal

    enabled: true
    hostName: jenkins.devtools.int
票数 2
EN

Stack Overflow用户

发布于 2021-02-09 01:49:04

我假设您使用的是CoreDNS。

您可以通过编辑位于此处/var/lib/kubelet/config.yaml的所有节点上的kubelet配置文件或在kubeadm init期间设置clusterDomain来更改群集基础DNS。

变化

代码语言:javascript
复制
clusterDomain: cluster.local

至:

代码语言:javascript
复制
clusterDomain: my.new.domain

现在,您还需要更改CoreDNS配置。CoreDNS为此使用了一个ConfigMap。您可以通过运行以下命令来获取当前的CoreDNS ConfigMap

代码语言:javascript
复制
kubectl get -n kube-system cm/coredns -o yaml

然后改变

代码语言:javascript
复制
kubernetes cluster.local in-addr.arpa ip6.arpa {
    ...
}

要匹配您的新域,如下所示:

代码语言:javascript
复制
kubernetes my.new.domain in-addr.arpa ip6.arpa {
    ...
}

现在将更改应用到CoreDNS ConfigMap。如果您重启kubelet和您的CoreDNS pod,那么您的集群应该使用新域。

例如,如果您有一个名为grafana-service,的服务,则现在可以通过以下地址进行访问:grafana-service.default.svc.my.new.domain

代码语言:javascript
复制
# 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48326773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档