📜  istioletsencrypt 集群发行者 .well-known acme-challenge (1)

📅  最后修改于: 2023-12-03 15:15:53.585000             🧑  作者: Mango

istioletsencrypt 集群发行者 .well-known acme-challenge

如果您是一个使用Istio的开发人员并且需要为您的域名启用 Let's Encrypt SSL证书,您需要使用istioletsencrypt集群发行者来有效地进行操作。

集群发行者可以将让您在Istio中为多个域名添加SSL证书,通过HTTP方式来进行证书验证,同时保证HTTPS流量的安全性。

在使用集群发行者之前,您需要确保您已经为您的域名配置了DNS解析。

接着,在您的Istio配置文件(.yaml)中声明如下配置:

apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    email: <you@example.com>
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - dns01:
        route53:
          region: us-west-2
          accessKeyID: "ACCESSKEYID"
          secretAccessKeySecretRef:
            name: route53-secret
            key: secret-access-key

在这个配置中,我们指定了生成证书的邮件地址,以及连向 Let's Encrypt 服务的 URL。另外,我们还指定了用于存储 Let's Encrypt 生成的私钥的密钥,以及使用的 DNS解析服务。

最后,您需要将以下片段加入Istio网关的配置文件中,来让您的 HTTPS 流量通过集群发行者认证:

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio
  namespace: istio-system
data:
  mesh: |-
    outboundTrafficPolicy:
      mode: ALLOW_ANY
  envoy.yaml: |-
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: istio-envoy
      namespace: istio-system
    data:
      envoy.yaml: |-
        ---
        apiVersion: v2
        kind: Listener
        metadata:
          name: https-listener
          namespace: istio-system
        spec:
          address:
            socketAddress:
              address: "*"
              portValue: 443
          filterChains:
          - filters:
            - name: envoy.http_connection_manager
              config:
                codec_type: AUTO
                stat_prefix: https-istio
                route_config:
                  name: https-router
                  virtual_hosts:
                  - name: backend
                    domains:
                    - "<your domain>"
                    routes:
                    - match:
                        prefix: "/"
                      route:
                        cluster: https-<your domain>
                http_filters:
                - name: envoy.router
                  config:
                    excluded_routes:
                    - name: healthcheck
                      match:
                        prefix: /healthcheck
            tls_context:
              common_tls_context:
                tls_certificates:
                - certificate_chain:
                    filename: /etc/certificates/tls.crt
                  private_key:
                    filename: /etc/certificates/tls.key
              validation_context:
                trusted_ca:
                  filename: /etc/certificates/root-cert.pem
                verify_subject_alt_name:
                - <your domain>
        ---
        apiVersion: v2
        kind: RouteConfiguration
        metadata:
          name: https-router
          namespace: istio-system
        spec:
          virtual_hosts:
          - name: backend
            domains:
            - "<your domain>"
            routes:
            - match:
                prefix: "/"
              route:
                cluster: https-<your domain>
        ---
        apiVersion: v2
        kind: Cluster
        metadata:
          name: https-<your domain>
          namespace: istio-system
        spec:
          connect_timeout: 0.25s
          type: STRICT_DNS
          lb_policy: ROUND_ROBIN
          http2_protocol_options: {}
          tls_context:
            common_tls_context:
              tls_certificates:
              - certificate_chain:
                  filename: /etc/certificates/tls.crt
                private_key:
                  filename: /etc/certificates/tls.key

在这个配置文件中,我们指定了我们的域名,TLS证书的位置,以及证书的验证方法。

最后,您需要在您的域名服务器上添加一条DNS记录。(例如,在AWS Route53 中,添加一条 TXT 记录)。

这样就可以通过Istio集群发行者获得Let's Encrypt SSL证书了!