Thank you for reading this post, don't forget to subscribe!
Возникла следующая проблема: был установлен кластер kubernetes всё точка, предложение закончено )))))
При установке кластера было задано имя кластера cluster.local
Оно совпадает с именем домен контроллера в AD поэтому если сервис внутри кубера щимится на любой сервис в
*. cluster.local то он резолвится на внутренних DNS и соответственно не может достучаться до внешнего сервиса
*. cluster.local
Поэтому 1ое и основное правило не присваивать имена кластерам на основе домена AD или других имён вне этого кластера.
СЛЕДУЮЩИЕ ДЕЙСТВИЯ ВЫПОЛНЯЕМ НА КАЖДОМ МАСТЕРЕ:
Смотрим текущие имена:
kubectl config get-contexts
1 2 |
CURRENT NAME CLUSTER AUTHINFO NAMESPACE * admin-cluster.local cluster.local admin-cluster.local |
Правим
kubectl config set-context admin-cluster.local --user='admin-new-name.cluster'
kubectl config rename-context admin-cluster.local admin-new-name.cluster
kubectl config set-context admin-new-name.cluster --cluster='new-name.cluster'
Проверяем:
kubectl config get-contexts
1 2 |
CURRENT NAME CLUSTER AUTHINFO NAMESPACE * admin-new-name.cluster new-name.cluster admin-new-name.cluster |
Теперь правим конфиги
sed -i 's|admin-cluster.local|admin-new-name.cluster|g' /etc/kubernetes/admin.conf
for i in `grep -rli cluster.local /etc/kubernetes/`; do sed -i 's|cluster.local|new-name.cluster|g' $i; done
sed -i 's|admin-cluster.local|admin-new-name.cluster|g' /root/.kube/config
sed -i 's|cluster.local|new-name.cluster|g' /root/.kube/config
Напоминаю что эти действия делаем на каждой тачке.
Теперь правим configmap чтобы кластер использовал новое доменное имя:
kubectl edit configmaps -n kube-system nodelocaldns
Теперь тут находим старое имя cluster.local и правим на новое new-name.cluster в 2х местах:
1 2 3 4 5 6 7 8 9 10 11 |
apiVersion: v1 data: Corefile: | new-name.cluster:53 { kind: ConfigMap metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"v1","data":{"Corefile":"<strong>new-name.cluster</strong>:53 |
Тоже самое делаем для конфигмапа coredns
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
kubectl edit configmaps -n kube-system coredns apiVersion: v1 data: Corefile: | .:53 { errors health { lameduck 5s } ready kubernetes new-name.cluster in-addr.arpa ip6.arpa { pods insecure 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 new-name.cluster in-addr.arpa ip6.arpa {\n pods insecure\n fallthrough in-addr.arpa ip6.arpa\n }\n prometheus :9153\n forward . /etc/resolv.conf {\n |
Перезапускаем coredns
kubectl delete pod -n kube-system coredns-5847bcdbbb-hqvq6 coredns-5847bcdbbb-x8pdt
И nodelocaldns
kubectl delete pod -n kube-system nodelocaldns-6xtxd nodelocaldns-7zmvw nodelocaldns-8xsvc nodelocaldns-jgcvh nodelocaldns-p9m7x nodelocaldns-w89vb
После этого для надёжности можно и ребутнуть мастера по одному
Далее переходим к воркерам, на них выполняем:
for i in `grep -rli cluster.local /etc/kubernetes/`; do sed -i 's|cluster.local|new-name.cluster|g' $i; done
И можно ребутнуться.
Далее проверяем:
kubectl config view
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
apiVersion: v1 clusters: - cluster: certificate-authority-data: DATA+OMITTED server: https://10.242.144.37:6443 name: new-name.cluster contexts: - context: cluster: new-name.cluster user: admin-new-name.cluster name: admin-new-name.cluster current-context: admin-new-name.cluster kind: Config preferences: {} users: - name: admin-new-name.cluster user: client-certificate-data: REDACTED client-key-data: REDACTED |
Ставим проверочный под:
kubectl apply -f https://k8s.io/examples/admin/dns/dnsutils.yaml
Подключаемся к нему:
kubectl exec -i -t dnsutils sh
Ну и чекаем:
1 2 3 4 |
/ # cat /etc/resolv.conf nameserver 169.254.25.10 search default.svc.new-name.cluster svc.new-name.cluster new-name.cluster options ndots:5 |
Проверяем как отвечает любой сервис с новым доменом:
1 2 |
/ # dig service-nginx-for-site-testru.test-site.svc.new-name.cluster A +short 10.100.114.120 |
Всё ок
Смотрим как отвечает тот же сервис со старым доменом:
1 2 |
/ # dig service-nginx-for-site-testru.test-site.svc.cluster.local A +short / # |
Как и предполагалось ничего.