Ваша конфигурация SSL работает нормально, и причина, по которой вы получаете эту ошибку, заключается в том, что вы используете самозаверяющий сертификат.
A самозаверяющий сертификат is сертификат , который не подписан центром сертификации (CA). Эти сертификаты легко изготовить и не стоят денег. Однако они не обеспечивают всех свойств безопасности, которые сертификаты, подписанные ЦС, стремятся обеспечить. Например, когда владелец веб-сайта использует самозаверяющий сертификат для предоставления услуг HTTPS , люди, посещающие этот веб-сайт, увидят предупреждение в своем браузере.
Кому решить эту проблему вы должны купить действующий сертификат от доверенного центра сертификации, или использовать Let's Encrypt , который даст сертификат, действительный в течение 90 дней, и по истечении этого периода вы можете продлить этот сертификат.
Если вы решите купить сертификат SSL, вы можете следовать описанному вами документу, чтобы создать секрет Kubernetes и использовать его при входе, просто вот так.
Но если вы не хотите покупать сертификат, вы можете установить cert-manager в своем кластере, это поможет вам сгенерировать действительные сертификаты с помощью Let's Encrypt.
Вот пример того, как использовать cert-manager + Let's Encrypt решение для генерации действительных SSL-сертификатов:
Использование cert-manager с Let's Encrypt
* 1 040 * cert-manager строится поверх Kubernetes, вводя центры сертификации и сертификаты в качестве первоклассных типов ресурсов в Kubernetes API. Это позволяет предоставлять «сертификаты как услугу» разработчикам, работающим в вашем кластере Kubernetes.
Let's Encrypt - это некоммерческий центр сертификации, управляемый Inte rnet Security Research Group который предоставляет сертификаты X.509 для шифрования Transport Layer Security бесплатно. Сертификат действителен в течение 90 дней, в течение которых продление может быть произведено в любое время. Я предполагаю, что у вас уже установлен и работает NGINX ingress.
Предварительные требования: - NGINX Ingress установлен и работает - HELM 3.0 установлен и работает
cert-manager install
Примечание : при работе на GKE (Google Kubernetes Engine), вы можете столкнуться с ошибкой «доступ запрещен» при создании некоторых из этих ресурсов. Это нюанс того, как GKE обрабатывает разрешения RBA C и IAM, и поэтому вы должны «повысить» свои собственные привилегии до уровня «cluster-admin» перед выполнением вышеуказанной команды. Если вы уже выполнили указанную выше команду, вам следует запустить их снова после повышения ваших разрешений:
Следуйте официальным документам для установки или просто используйте HELM 3.0 с следующей командой :
$ kubectl create namespace cert-manager
$ helm repo add jetstack https://charts.jetstack.io
$ helm repo update
$ kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.14.1/cert-manager-legacy.crds.yaml
Создать CLusterIssuer
для Let's Encrypt: Сохраните содержимое ниже в новом файле с именем letsencrypt-production.yaml
:
Примечание: Заменить <EMAIL-ADDRESS>
с действующим адресом электронной почты.
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
labels:
name: letsencrypt-prod
name: letsencrypt-prod
spec:
acme:
email: <EMAIL-ADDRESS>
http01: {}
privateKeySecretRef:
name: letsencrypt-prod
server: 'https://acme-v02.api.letsencrypt.org/directory'
Примените конфигурацию с помощью:
kubectl apply -f letsencrypt-production.yaml
Установите cert-manager с Let's Encrypt в качестве центра сертификации по умолчанию :
helm install cert-manager \
--namespace cert-manager --version v0.8.1 jetstack/cert-manager \
--set ingressShim.defaultIssuerName=letsencrypt-prod \
--set ingressShim.defaultIssuerKind=ClusterIssuer
Проверьте установку:
$ kubectl get pods --namespace cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-5c6866597-zw7kh 1/1 Running 0 2m
cert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m
cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m
Используя cert-manager
Примените эту аннотацию к входящему SPE c:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
После применения сертификата -manager сгенерирует сертификат TLS для домена, настроенного в Host:
, например:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-app
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
rules:
- host: myapp.domain.com
http:
paths:
- path: "/"
backend:
serviceName: my-app
servicePort: 80