Добавление IP и DNS в сертификат microk8s

TL;DR

По умолчанию сертификат microk8s обычно не содержит внешний IP или DNS-имя в SAN (alt_names). Поэтому при подключении к Kubernetes API извне могут возникать TLS-ошибки. Нужно добавить внешний IP/DNS в /var/snap/microk8s/current/certs/csr.conf.template и перевыпустить сертификат.

  • Нужно, если доступ к microk8s идет:

    • по внешнему IP,
    • по внешнему DNS-имени,
    • через роутер / NAT.
  • DNS-имя или IP нужно добавить в файл /var/snap/microk8s/current/certs/csr.conf.template, в секцию alt_names:

[ alt_names ]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster
DNS.5 = kubernetes.default.svc.cluster.local
DNS.6 = mydomain.com
  • После изменения перевыпустить сертификат:
sudo microk8s refresh-certs --cert server.crt

Gotchas

  • Подключаться нужно именно по тому IP/DNS, который добавлен в alt_names.
  • Если добавить новый адрес, старый сертификат не начнет работать автоматически — его нужно перевыпустить.

Проверка

  • Повторно подключиться к API по внешнему IP/DNS.
  • Убедиться, что TLS-ошибка о несовпадении имени сертификата исчезла.