Ошибка сертификата при подключении к кластеру Kubernet за брандмауэром - PullRequest
0 голосов
/ 29 октября 2019

У меня голый металлический кластер Kubernete, работающий за брандмауэром. При попытке подключиться к нему с моей локальной машины (на другой стороне брандмауэра) соединение не работает, потому что сертификат неверен.
Проблема заключается в следующем. Кластер работает внутри сети за брандмауэром, и сертификат был создан с использованием главного IP-адреса. Но когда я использую этот же сертификат, пытаясь подключиться извне внутренней сети, я использую другой IP-адрес. В этот момент появляется сообщение об ошибке, в котором говорится, что сертификат отличается от адреса, который я пытаюсь подключить.

IP-адрес, который я использую для доступа к кластеру, отличается от фактического IP-адреса кластера, отображаемого здесь: enter image description here
Как это исправить? Можно ли создать еще один сертификат с другим IP на моем главном узле?

1 Ответ

1 голос
/ 29 октября 2019

Вы можете добавить новые альтернативные имена субъекта (SAN) к сертификату сервера API Kubernetes, выполнив следующие действия:

Сначала вам потребуется файл конфигурации kubeadm. Это создаст файл с именем kubeadm.yaml:

kubectl -n kube-system get configmap kubeadm-config -o jsonpath='{.data.ClusterConfiguration}' > kubeadm.yaml

Теперь откройте файл в редакторе и найдите список certSANs в разделе apiServer. Если он не существует, вам нужно добавить его;если это так, вы просто добавите еще одну запись в этот список. Пример:

apiServer:
  certSANs:
  - "172.29.50.162"
  - "k8s.domain.com"
  - "other-k8s.domain.net"
  extraArgs:
    authorization-mode: Node,RBAC
  timeoutForControlPlane: 4m0s

Теперь переместите старые сертификаты в другую папку, иначе kubeadm не создаст новые заново:

mv /etc/kubernetes/pki/apiserver.{crt,key} ~

Используйте kubeadm длясоздать новые сертификаты apiserver:

kubeadm init phase certs apiserver --config kubeadm.yaml

Теперь перезапустите ваш kubeapiserver контейнер:

  1. Выполните docker ps | grep kube-apiserver | grep -v pause, чтобы получить идентификатор контейнерадля контейнера, на котором запущен сервер API Kubernetes
  2. Запустите docker kill <containerID>, чтобы уничтожить контейнер.
  3. Kubelet автоматически перезапустит контейнер, который получит новый сертификат.

Если все работает должным образом, не забудьте обновить kubeadm ConfigMap, хранящуюся в кластере, в противном случае в будущем обновлении kubeadm будет не хватать вашей новой конфигурации:

kubeadm config upload from-file --config kubeadm.yaml

В этой статье содержится более полное руководство о том, как добавить имя в сертификат сервера API Kubernetes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...