我想通过向我的DNS服务器添加一个存根区域,从Kubernetes集群外部解析kube-dns名称。这需要将DNS域更改为适合我的cluster.local名称空间的名称。
集群DNS与cluster.local配合工作得很好。要更改域,我将/etc/systemd/system/kubelet.service.d/10-kubeadm.conf上的KUBELET_DNS_ARGS行修改为:
Environment="KUBELET_DNS_ARGS=--cluster-dns=x.y.z --cluster-domain=cluster.mydomain.local --resolv-conf=/etc/resolv.conf.kubernetes"重启kubelet后,外部名称可以解析,但kubernetes名称解析失败。
我可以看到kube-dns仍然在运行:
/kube-dns --domain=cluster.local. --dns-port=10053 --config-dir=/kube-dns-config --v=2我能够找到cluster.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我仍然看到kube-dns gettings以--domain=cluster.local开头。
我遗漏了什么?
发布于 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配置映射的核心文件部分如下所示:
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区域和我们自己的区域上进行响应。
发布于 2020-04-25 21:45:36
我部署了入口控制器的内部实例,并将CNAME添加到coreDNS配置中。部署内部nginx-ingress
helm install int -f ./values.yml stable/nginx-ingress --namespace ingress-nginxvalues.yaml:
controller:
ingressClass: 'nginx-internal'
reportNodeInternalIp: true
service:
enabled: true
type: ClusterIP编辑coreDNS配置:KUBE_EDITOR=nano kubectl edit configmap coredns -n kube-system
我的核心文件:
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中这样配置它:
master:
ingress:
annotations:
kubernetes.io/ingress.class: nginx-internal
enabled: true
hostName: jenkins.devtools.int发布于 2021-02-09 01:49:04
我假设您使用的是CoreDNS。
您可以通过编辑位于此处/var/lib/kubelet/config.yaml的所有节点上的kubelet配置文件或在kubeadm init期间设置clusterDomain来更改群集基础DNS。
变化
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-service,的服务,则现在可以通过以下地址进行访问: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.domainhttps://stackoverflow.com/questions/48326773
复制相似问题