📅  最后修改于: 2023-12-03 15:15:53.585000             🧑  作者: Mango
如果您是一个使用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证书了!