С развитием сети,https
Незаменима для современных сайтов. Если вы хотите получить бесплатный сертификат, тоLet's Encryptхороший выбор, его основная цель — продвижение сайтаhttps
процесс.
Бесплатный сертификат благодаря Let’s Encrypt
с помощьюhelm
,существуетk8s cluster
в конфигурации доменного имениhttps
Это станет очень просто, после успешного развертывания ресурсов,k8s
ЧжунвэйIngress
Настроить сертификаты будет очень просто: достаточно добавить еще две строчки кода в Ingress.
В этой статье вы узнаете, как настроить https для вашего доменного имени всего за три шага.
До этой статьи предполагалось, что на этом этапе вы сможете настроитьIngress
и успешно получить доступ к вашему домену, если нет, вы можете обратиться к вышеуказанным статьям из этой серии
- Разверните свое первое приложение: модуль, приложение и сервис
- Доступ к вашему приложению из внешнего домена: Ingress
Если это может помочь вам, вы можете помочь мне вshfshanyue/op-noteПоставь на него звезду.
01 Разверните cert-manager с помощью helm
Мы выбираем этоhelm chart
jetstack/cert-managerразвертыватьhttps
. В настоящее время на github репозиторийjetstack/cert-managerУже есть 4.4K Star.
Если вы хотите использоватьlet's encrypt
автоматически дляIngress
настроитьhttps
.在部署时需要为 helm chart 指定以下参数。
ingressShim.defaultIssuerName=letsencrypt-prod
ingressShim.defaultIssuerKind=Issuer
Есть околоДокументация для эмитентов
Процесс развертывания выглядит следующим образом, используется здесьhelm v3
развернуть
# 部署前需要一些 crd
$ kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.11/deploy/manifests/00-crds.yaml
# 为 helm 添加 repo
$ helm repo add jetstack https://charts.jetstack.io
# 使用 helm v3 部署,指定参数
$ helm install cert-manager jetstack/cert-manager --set "ingressShim.defaultIssuerName=letsencrypt-prod,ingressShim.defaultIssuerKind=Issuer"
NAME: cert-manager
LAST DEPLOYED: 2019-10-26 21:27:56.488948248 +0800 CST m=+2.081581159
NAMESPACE: default
STATUS: deployed
NOTES:
cert-manager has been deployed successfully!
In order to begin issuing certificates, you will need to set up a ClusterIssuer
or Issuer resource (for example, by creating a 'letsencrypt-staging' issuer).
More information on the different types of issuers and how to configure them
can be found in our documentation:
https://docs.cert-manager.io/en/latest/reference/issuers.html
For information on how to configure cert-manager to automatically provision
Certificates for Ingress resources, take a look at the `ingress-shim`
documentation:
https://docs.cert-manager.io/en/latest/reference/ingress-shim.html
Проверьте статус и просмотрите развертывание прямо сейчасcrd
иpod
статус, проверьте, прошла ли проверка успешно
$ kubectl get crd
NAME CREATED AT
certificaterequests.cert-manager.io 2019-10-26T01:16:21Z
certificates.cert-manager.io 2019-10-26T01:16:21Z
challenges.acme.cert-manager.io 2019-10-26T01:16:21Z
clusterissuers.cert-manager.io 2019-10-26T01:16:24Z
issuers.cert-manager.io 2019-10-26T01:16:24Z
orders.acme.cert-manager.io 2019-10-26T01:16:21Z
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
cert-manager-5d8fd69d88-s7dtg 1/1 Running 0 57s
cert-manager-cainjector-755bbf9c6b-ctkdb 1/1 Running 0 57s
cert-manager-webhook-76954fcbcd-h4hrx 1/1 Running 0 57s
02 Настройка эмитентов ACME
Укажите вид какIssuer
и измените следующие почтовые ящики на свои. Конфигурация ресурса Issuer выглядит следующим образом.
apiVersion: cert-manager.io/v1alpha2
kind: Issuer
metadata:
name: letsencrypt-prod
spec:
acme:
# The ACME server URL
server: https://acme-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: example@shanyue.tech
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: letsencrypt-prod
# Enable the HTTP-01 challenge provider
solvers:
- http01:
ingress:
class: nginx
использоватьkubectl apply -f
Развертывание вступает в силу
$ kubectl apply -f letsencrypt-issue.yaml
03 Добавьте аннотацию к Ingress
Указать при развертывании Ingressannotations
Вы можете легко настроить сертификат
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/issuer: "letsencrypt-prod"
оIngress
Полная конфигурация выглядит следующим образом, вы также можете проверить ее на моем githubDeployment
,Service
прибытьIngress
Полная конфигурация:shfshanyue/learn-k8s:/conf/nginx.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: nginx-service-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- nginx.xiange.tech
secretName: nginx-tls
rules:
- host: nginx.xiange.tech
http:
paths:
- backend:
serviceName: nginx-service
servicePort: 80
path: /
чекcertificate
государство,Ready
правда
За счет зеркалирования в quay.io у PULL Image есть время, можно занять десять минут.
$ kubectl get certificate
NAME READY SECRET AGE
nginx-tls True nginx-tls 44h
$ kubectl describe certificate nginx-tls
Name: nginx-tls
Namespace: default
Labels: <none>
Annotations: <none>
API Version: cert-manager.io/v1alpha2
Kind: Certificate
Metadata:
Creation Timestamp: 2019-10-26T13:30:06Z
Generation: 1
Owner References:
API Version: extensions/v1beta1
Block Owner Deletion: true
Controller: true
Kind: Ingress
Name: nginx-service-ingress
UID: c9abc7b7-45da-431b-b732-e535a809dfdd
Resource Version: 2822740
Self Link: /apis/cert-manager.io/v1alpha2/namespaces/default/certificates/nginx-tls
UID: ccb3aa54-e967-4813-acbe-41d9801f29a6
Spec:
Dns Names:
nginx.xiange.tech
Issuer Ref:
Group: cert-manager.io
Kind: Issuer
Name: letsencrypt-prod
Secret Name: nginx-tls
Status:
Conditions:
Last Transition Time: 2019-10-26T13:43:02Z
Message: Certificate is up to date and has not expired
Reason: Ready
Status: True
Type: Ready
Not After: 2020-01-24T12:43:01Z
Events: <none>
доступIngress
Доменное имя, настроенное в , маленькая подсказка с замком в верхнем левом углу браузера Chrome.https
Настроено успешно