#ssl #kubernetes
#ssl #kubernetes
Вопрос:
Я следил за этим руководством: https://cert-manager.io/docs / , и после того, как я установил свой менеджер сертификатов и убедился, что они работают с kubectl, получите pods —namespace cert-manager,
cert-manager-5597cff495-l5hjs 1/1 Running 0 91m
cert-manager-cainjector-bd5f9c764-xrb2t 1/1 Running 0 91m
cert-manager-webhook-5f57f59fbc-q5rqs 1/1 Running 0 91m
Затем я настроил свой cert-manager с помощью ACME issuer, следуя этому руководству https://cert-manager.io/docs/configuration/acme / .
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 will use this to contact you about expiring
# certificates, and issues related to your account.
email: aidenhsy@gmail.com
server: https://acme-staging-v02.api.letsencrypt.org/directory
privateKeySecretRef:
# Secret resource that will be used to store the account's private key.
name: letsencrypt-staging
# Add a single challenge solver, HTTP01 using nginx
solvers:
- http01:
ingress:
class: nginx
Вот мой полный конфигурационный файл ingress:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-srv
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
rules:
- host: www.hyhaus.xyz
http:
paths:
- path: /api/?(.*)
backend:
serviceName: devback-srv
servicePort: 4000
- path: /?(.*)
backend:
serviceName: devfront-srv
servicePort: 3000
---
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/do-loadbalancer-enable-proxy-protocol: 'true'
service.beta.kubernetes.io/do-loadbalancer-hostname: 'www.hyhaus.xyz'
labels:
helm.sh/chart: ingress-nginx-2.0.3
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/version: 0.32.0
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: controller
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
type: LoadBalancer
externalTrafficPolicy: Local
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
- name: https
port: 443
protocol: TCP
targetPort: https
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/component: controller
---
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 will use this to contact you about expiring
# certificates, and issues related to your account.
email: aidenhsy@gmail.com
server: https://acme-staging-v02.api.letsencrypt.org/directory
privateKeySecretRef:
# Secret resource that will be used to store the account's private key.
name: letsencrypt-staging
# Add a single challenge solver, HTTP01 using nginx
solvers:
- http01:
ingress:
class: nginx
Однако, когда я перехожу на свой сайт, браузер предупреждает: сертификат безопасности не является доверенным операционной системой вашего компьютера. И когда я взглянул на свой сертификат, он показывает самоназначенный, что на самом деле не то, что я хочу. Я делаю что-то не так?
Ответ №1:
Это заполнитель сертификата, предоставленный nginx ingress controller
. Когда вы видите это, это означает, что для конечной точки нет другого (выделенного) сертификата.
Теперь первая причина, по которой это произошло, заключается в том, что у вас Ingress
нет необходимых данных. Обновите его следующим образом:
metadata:
annotations:
# which issuer to use
cert-manager.io/cluster-issuer: "letsencrypt-staging"
spec:
tls: # placing a host in TLS config indicates that a certificate should be created
- hosts:
- example.org
- www.example.org
- xyz.example.org
secretName: myingress-cert # cert-manager will store the created certificate in this secret
Документация для объектов ingress находится здесь.
Если вышеуказанное не помогло, попробуйте выполнить действия по устранению неполадок, предлагаемые документацией. По моему опыту, проверки CertificateRequest
и Certificate
ресурсов в большинстве случаев было достаточно для определения проблемы.
$ kubectl get certificate
$ kubectl describe certificate <certificate-name>
$ kubectl get certificaterequest
$ kubectl describe certificaterequest <CertificateRequest name>
Помните, что эти объекты имеют пространство имен, что означает, что они будут находиться в том же пространстве ingress
имен, что и объект.
Ответ №2:
Чтобы защитить вход, сначала вам нужно добавить ClusterIssuer к вашим ресурсам входа, а затем cert-manager подберет его и создаст для вас ресурс сертификата. Kind : ingress metadata: annotations : cert-manager.io/cluster-issuer: nameOfClusterIssuer
.
Во-вторых, вы должны добавить tls
<= это указывает на создание сертификата (пары ключ / сертификат) Cert-manager через ClusterIssuer.
В-третьих, вы должны добавить secretName: myingress
<= здесь менеджер сертификатов сохранит секреты tls (после создания пары ключ / сертификат и сохранит их для вас)..