Автоматически настроить https для доменного имени в k8s

Эксплуатация и техническое обслуживание Kubernetes

С развитием сети,httpsНезаменима для современных сайтов. Если вы хотите получить бесплатный сертификат, тоLet's Encryptхороший выбор, его основная цель — продвижение сайтаhttpsпроцесс.

Бесплатный сертификат благодаря Let’s Encrypt

с помощьюhelm,существуетk8s clusterв конфигурации доменного имениhttpsЭто станет очень просто, после успешного развертывания ресурсов,k8sЧжунвэйIngressНастроить сертификаты будет очень просто: достаточно добавить еще две строчки кода в Ingress.

В этой статье вы узнаете, как настроить https для вашего доменного имени всего за три шага.

До этой статьи предполагалось, что на этом этапе вы сможете настроить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Настроено успешно

nginx 配置成功
)

Ссылаться на