Это происходит потому, что вы используете самоподписанный сертификат.
A самоподписанный сертификат - это сертификат , который не подписан центр сертификации (CA). Эти сертификаты легко сделать и не стоят денег. Однако они не предоставляют все свойства безопасности, которые имеют целью предоставить сертификаты, подписанные ЦС. Например, когда владелец веб-сайта использует самозаверяющий сертификат для предоставления услуг HTTPS , люди, посещающие этот сайт, увидят предупреждение в своем браузере.
Для решения этой проблемы Вы можете купить действительный сертификат в доверенном центре сертификации или использовать Let's Encrypt для его генерации.
Использование cert-manager с Let's Encrypt
cert-manager основывается на Kubernetes, представляя центры сертификации и сертификаты как первоклассные типы ресурсов в API Kubernetes. Это позволяет предоставлять «сертификаты как услугу» разработчикам, работающим в вашем кластере Kubernetes.
Let's Encrypt - это некоммерческий центр сертификации, управляемый Inte rnet Security Research Group который предоставляет сертификаты X.509 для шифрования Transport Layer Security бесплатно. Сертификат действителен в течение 90 дней, в течение которых продление может иметь место в любое время. Я полагаю, у вас уже установлен NGINX вход и работает.
Предварительные требования: - NGINX Вход установлен и работает - HELM 3.0 установлен и работает
установка cert-manager
Примечание : при работе в 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 в качестве CA по умолчанию :
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:
.
{{ if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: {{ template "fullname" . }}
labels:
app: {{ template "fullname" . }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
annotations:
kubernetes.io/ingress.class: addon-http-application-routing
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- {{ .Values.ingress.basedomain }}
secretName: ingress-crypto-auth
rules:
- host: {{ .Release.Name }}.{{ .Values.ingress.basedomain }}
http:
paths:
- path: /
backend:
serviceName: {{ template "fullname" . }}
servicePort: {{ .Values.service.externalPort }}
{{ end }}
Пожалуйста, дайте мне знать, если это помогло.