使用 ZeroSSL 保护入口
ZeroSSL
本指南将引导您使用 ZeroSSL 颁发者类型来保护 Kubernetes 入口 资源。
ZeroSSL 与 Let's Encrypt 及其竞争对手一样,允许创建免费的 90 天证书。只需在 https://zerossl.com/ 创建账户。然后进入开发者部分并生成 用于 ACME 客户端的 EAB 凭据
。稍后您将需要它。
请注意!
EAB 凭据不会存储在您的账户中,请确保将其记录在某个地方。每次点击“生成”都会创建一个新的凭据集。即使您创建了多个凭据,它们都将保持功能。
先决条件
- 一个 AWS 账户
- 已安装 kubectl
- 访问公开注册的 DNS 区域
- Kubernetes 集群,您可以使用 AWS EKS
- ingress-nginx 部署并运行在集群中
教程场景:
安装 cert-manager
确保您使用的是 cert-manager 1.8.2+
/1.7.3+
。有关更多详细信息,请参阅 链接。
请仔细阅读安装指南,并在验证 cert-manager 正确部署后返回此步骤。按照 在 Kubernetes 上运行 下的步骤在 k8s 中安装。
为了自动切换到 ZeroSSL,我们建议通过将以下配置添加到值文件来设置默认垫片。
ingressShim:defaultIssuerName: "zerossl-production"defaultIssuerKind: "ClusterIssuer"crds:enabled: true
使用 helm 安装它
helm upgrade --install --namespace cert-manager --version v1.16.1 cert-manager jetstack/cert-manager -f values.yaml
配置您的 DNS 记录
使用 AWS 管理 DNS 的最佳方法是使用 Route53。创建具有修改 Route53 规则权限的 AWS 账户。
EAB 密钥
获取凭据后,第一步是使用密钥创建种子。它们负责与您的 ZeroSSL 账户进行身份验证。
$ kubectl create secret generic \zero-ssl-eabsecret \--namespace=cert-manager \--from-literal=secret='YOUR_ZEROSSL_EAB_HMAC_KEY'
另一种创建密钥的方法。
首先将其编码为 base64。
echo -n "YOUR_ZEROSSL_EAB_HMAC_KEY" | base64 -w 0
apiVersion: v1kind: Secretmetadata:name: zero-ssl-eabsecretdata:secret: YOUR_ENCODED_ZEROSSL_EAB_HMAC_KEY
kubectl apply -f zero-ssl-eabsecret.yaml -n cert-manager
集群颁发者
然后我们必须创建 ZeroSSL
集群颁发者
,我们称之为 zerossl-production
。在我们的案例中,我们使用的是 AWS。请参阅先决条件以配置所有必需的元素。
apiVersion: cert-manager.io/v1kind: ClusterIssuermetadata:name: zerossl-productionspec:acme:# ZeroSSL ACME serverserver: https://acme.zerossl.com/v2/DV90email: dummy-email@yopmail.com# name of a secret used to store the ACME account private keyprivateKeySecretRef:name: zerossl-prod# for each cert-manager new EAB credencials are requiredexternalAccountBinding:keyID: YOUR_ZEROSSL_EAB_KEY_IDkeySecretRef:name: zero-ssl-eabsecretkey: secretkeyAlgorithm: HS256# ACME DNS-01 provider configurations to verify domainsolvers:- selector: {}dns01:route53:region: us-west-2# optional if ambient credentials are available; see ambient credentials documentation# see Route53 for >0 issue "letsencrypt.org" and change to >0 issue "sectigo.com"accessKeyID: ACCESS_KEY_IDsecretAccessKeySecretRef:name: route53-credentials-secretkey: secret-access-key
然后运行:
$ kubectl apply -n cert-manager -f zerossl-production.yaml
$ kubectl describe Clusterissuer zerossl-prodStatus:Acme:Last Registered Email: dummy-email@yopmail.comUri: https://acme.zerossl.com/v2/DV90/account/tXXX_NwSv15rlS_XXXXConditions:Last Transition Time: 2021-09-09T17:03:26ZMessage: The ACME account was registered with the ACME serverReason: ACMEAccountRegisteredStatus: TrueType: Ready
请注意!
如果此步骤失败并且 ACME 账户未注册,请检查 zero-ssl-eabsecret
中的密钥是否正确。
请求入口证书
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: test-ingressnamespace: defaultspec:rules:- host: test.example.comtls:- secretName: secret-tls
应用 test-ingress
kubectl apply -f ingress.yaml
搞定!检查您的入口。
kubectl describe ingress test-ingress -n default# check if tls is terminated using secret-tlsopenssl s_client -showcerts -connect test.example.com:443# verify server certificate and its chain