Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете настроить экземпляр службы Azure Kubernetes (AKS), чтобы использовать Let's Encrypt и автоматически получать TLS/SSL-сертификат для вашего домена. Сертификат устанавливается в Шлюз приложений Azure, который выполняет завершение TLS/SSL для кластера AKS.
В описанной в этой статье настройке используется надстройка Kubernetes cert-manager , которая автоматизирует создание сертификатов и управление ими.
Совет
Рассмотрите Шлюз приложений для контейнеров в качестве решения для входа в Kubernetes. Для получения дополнительной информации см. Краткое руководство: развертывание шлюза приложений для контроллера ALB контейнеров.
Установите надстройку
Чтобы установить cert-manager в существующем кластере AKS, выполните следующие действия.
Выполните следующий сценарий, чтобы установить диаграмму Helm диспетчера сертификатов. Этот сценарий выполняет следующие действия:
- Создает новое
cert-manager
пространство имен в кластере AKS - Создает следующие пользовательские определения ресурсов (CRD):
Certificate
,Challenge
, ,ClusterIssuer
Issuer
Order
- Устанавливает диаграмму cert-manager (с сайта cert-manager)
#!/bin/bash # Install the CustomResourceDefinition resources separately kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.1/cert-manager.crds.yaml # Create the namespace for cert-manager kubectl create namespace cert-manager # Label the cert-manager namespace to disable resource validation kubectl label namespace cert-manager cert-manager.io/disable-validation=true # Add the Jetstack Helm repository helm repo add jetstack https://charts.jetstack.io # Update your local Helm chart repository cache helm repo update # Install the cert-manager Helm chart # Helm v3+ helm install \ cert-manager jetstack/cert-manager \ --namespace cert-manager \ --version v1.17.1 \ # --set installCRDs=true # To automatically install and manage the CRDs as part of your Helm release, # you must add the --set installCRDs=true flag to your Helm installation command.
- Создает новое
Создайте ресурс
ClusterIssuer
. Диспетчер сертификатов требует, чтобы этот ресурс представлял центр сертификации Let's Encrypt, который выдает подписанный сертификат.Cert-manager использует не имеющий пространства имен ресурс
ClusterIssuer
для выдачи сертификатов, доступных из нескольких пространств имен. Let's Encrypt использует протокол ACME, чтобы убедиться, что вы контролируете определенное доменное имя и для выдачи сертификата. Дополнительные сведения о настройкеClusterIssuer
свойств можно найти в документации cert-manager.ClusterIssuer
указывает cert-manager выдавать сертификаты с помощью промежуточной среды Let's Encrypt, используемой для тестирования. (Корневой сертификат отсутствует в браузерах или хранилищах доверия клиентов.)Тип проблемы по умолчанию в следующем YAML – это
http01
. Другие типы вызовов можно найти в документации Let's Encrypt.В следующем файле YAML обязательно замените
<YOUR.EMAIL@ADDRESS>
своей информацией.#!/bin/bash kubectl apply -f - <<EOF apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-staging spec: acme: # You must replace this email address with your own. # Let's Encrypt uses this to contact you about expiring # certificates, and issues related to your account. email: <YOUR.EMAIL@ADDRESS> # ACME server URL for Let's Encrypt's staging environment. # The staging environment won't issue trusted certificates but is # used to ensure that the verification process is working properly # before moving to production server: https://acme-staging-v02.api.letsencrypt.org/directory privateKeySecretRef: # Secret resource used to store the account's private key. name: example-issuer-account-key # Enable the HTTP-01 challenge provider # you prove ownership of a domain by ensuring that a particular # file is present at the domain solvers: - http01: ingress: # class: azure/application-gateway ingressTemplate: metadata: annotations: kubernetes.io/ingress.class: azure/application-gateway EOF
Создайте ресурс Ingress для предоставления приложения
guestbook
с использованием развертывания Шлюза приложений с сертификатом Let's Encrypt.Убедитесь, что в развертывании шлюза приложений есть публичная IP-конфигурация внешнего интерфейса с DNS-именем. Используйте домен по умолчанию
azure.com
или подготовьте зону Azure DNS, а затем назначьте свой личный домен. Заметкаcertmanager.k8s.io/cluster-issuer: letsencrypt-staging
сообщает диспетчеру сертификатов об обработке тегированного ресурса входящего трафика.В следующем YAML обязательно замените
<PLACEHOLDERS.COM>
на собственный домен или на домен Шлюза приложений (например,kh-aks-ingress.westeurope.cloudapp.azure.com
).kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: guestbook-letsencrypt-staging annotations: kubernetes.io/ingress.class: azure/application-gateway cert-manager.io/cluster-issuer: letsencrypt-staging spec: tls: - hosts: - <PLACEHOLDERS.COM> secretName: guestbook-secret-name rules: - host: <PLACEHOLDERS.COM> http: paths: - backend: serviceName: frontend servicePort: 80 EOF
Через несколько секунд вы можете получить доступ к службе
guestbook
через URL-адрес HTTPS Шлюза приложений, используя автоматически выданный сертификат Let's Encrypt для промежуточного тестирования.Браузер может предупредить вас о недопустимом центре сертификации. Причина заключается в том, что
CN=Fake LE Intermediate X1
выдал промежуточный сертификат. Это предупреждение означает, что система работала должным образом, и вы готовы к получению сертификата на эксплуатацию.После успешной настройки промежуточного сертификата можно переключиться на рабочий сервер ACME:
- Замените промежуточную заметку на ресурс
cert-manager.io/cluster-issuer: letsencrypt-prod
входящего трафика. - Удалите существующий промежуточный
ClusterIssuer
ресурс, созданный ранее. Создайте новый промежуточный ресурс, заменив в предыдущемClusterIssuer
YAML сервер ACME наhttps://acme-v02.api.letsencrypt.org/directory
.
- Замените промежуточную заметку на ресурс
Перед истечением срока действия сертификата Let's Encrypt, cert-manager
автоматически обновляет сертификат в хранилище секретов Kubernetes. На этом этапе контроллер Шлюз приложений для входящего трафика применяет обновленный секрет, указанный в ресурсах входящего трафика, которые он использует для настройки Шлюза приложений.