Настройте сервер Kubernetes API для подключения к отдельному защищенному TLS-кластеру etcd, где каждый участник имеет свой уникальный публичный сертификат

Я следую за Kubernetes по трудному пути, не используя облако Google, а вместо этого использую контейнер linux и отдельный кластер etcd (тот, который не существует на узлах контроллера плоскости управления, где живет сервер API).

Окружение выглядит так:

etcd01, etcd02, etcd03

controller01, controller02, controller03

worker01, worker02, worker03

Каждый член etcd имеет свой уникальный публичный сертификат с именем etcd{01,02,03}.lab.com.crt с их собственными уникальными альтернативными именами субъекта и общим именем, и серверы API хост-контроллера имеют один сертификат на каждой машине, которую они все совместно используют (api-server.crt).

При следовании Kubernetes по сложному пути для раздела " Подготовка CA и генерация сертификатов TLS" в разделе " Сертификат сервера API Kubernetes " он создает следующие сертификаты:

kubernetes-key.pem
kubernetes.pem

В разделе " Настройка сервера etcd " он использует эти два сертификата в конфигурации с целью размещения экземпляров etcd на самих контроллерах.

[Service]
ExecStart=/usr/local/bin/etcd \\
  --name ${ETCD_NAME} \\
  --cert-file=/etc/etcd/kubernetes.pem \\
  --key-file=/etc/etcd/kubernetes-key.pem \\
  --peer-cert-file=/etc/etcd/kubernetes.pem \\
  --peer-key-file=/etc/etcd/kubernetes-key.pem \\
  --trusted-ca-file=/etc/etcd/ca.pem \\
  --peer-trusted-ca-file=/etc/etcd/ca.pem \\
  --peer-client-cert-auth \\
  --client-cert-auth \\
  --initial-advertise-peer-urls https://${INTERNAL_IP}:2380 \\
  --listen-peer-urls https://${INTERNAL_IP}:2380 \\
  --listen-client-urls https://${INTERNAL_IP}:2379,https://127.0.0.1:2379 \\
  --advertise-client-urls https://${INTERNAL_IP}:2379 \\
  --initial-cluster-token etcd-cluster-0 \\
  --initial-cluster controller-0=https://10.240.0.10:2380,controller-1=https://10.240.0.11:2380,controller-2=https://10.240.0.12:2380 \\
  --initial-cluster-state new \\
  --data-dir=/var/lib/etcd

Вот конфигурация, которую он использует в " Настройте сервер API Kubernetes " для сервера API, используя те же сертификаты, что и упомянутые ранее:

[Service]
ExecStart=/usr/local/bin/kube-apiserver \\
  --advertise-address=${INTERNAL_IP} \\
  --allow-privileged=true \\
  --apiserver-count=3 \\
  --audit-log-maxage=30 \\
  --audit-log-maxbackup=3 \\
  --audit-log-maxsize=100 \\
  --audit-log-path=/var/log/audit.log \\
  --authorization-mode=Node,RBAC \\
  --bind-address=0.0.0.0 \\
  --client-ca-file=/var/lib/kubernetes/ca.pem \\
  --enable-admission-plugins=Initializers,NamespaceLifecycle,NodeRestriction,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota \\
  --enable-swagger-ui=true \\
  --etcd-cafile=/var/lib/kubernetes/ca.pem \\
  --etcd-certfile=/var/lib/kubernetes/kubernetes.pem \\
  --etcd-keyfile=/var/lib/kubernetes/kubernetes-key.pem \\
  --etcd-servers=https://10.240.0.10:2379,https://10.240.0.11:2379,https://10.240.0.12:2379 \\
  --event-ttl=1h \\
  --experimental-encryption-provider-config=/var/lib/kubernetes/encryption-config.yaml \\
  --kubelet-certificate-authority=/var/lib/kubernetes/ca.pem \\
  --kubelet-client-certificate=/var/lib/kubernetes/kubernetes.pem \\
  --kubelet-client-key=/var/lib/kubernetes/kubernetes-key.pem \\
  --kubelet-https=true \\
  --runtime-config=api/all \\
  --service-account-key-file=/var/lib/kubernetes/service-account.pem \\
  --service-cluster-ip-range=10.32.0.0/24 \\
  --service-node-port-range=30000-32767 \\
  --tls-cert-file=/var/lib/kubernetes/kubernetes.pem \\
  --tls-private-key-file=/var/lib/kubernetes/kubernetes-key.pem \\
  --v=2
Restart=on-failure
RestartSec=5

При поиске документации для сервера API Kubernetes относительно опции конфигурации --etcd-certfile, Говорится:

" string: SSL certification file used to secure etcd communication. "

Это замечательно, если у вас есть один и тот же сертификат для каждого члена etcd, но как я могу заставить эту работу работать, когда каждый член etcd имеет свой собственный файл сертификата с разными именами, включая уникальные альтернативные имена субъекта и общее имя?

0 ответов

Другие вопросы по тегам