使用 VMware Tanzu Community Edition 设置 Let's Encrypt with Contour

时间:2022-12-30 15:02:52

使用 VMware Tanzu Community Edition 设置 Let's Encrypt with Contour

受信任的证书对于当今的任何 Web 应用程序都是必需的。验证通信是否加密和安全是赌注。Let's Encrypt​是最受欢迎的证书颁发机构之一,为数百万用户提供TLS证书。将 cert-manager 与 VMware Tanzu Community Edition 结合使用可以更轻松地保护应用程序。

Contour 是第 7 层应用程序负载均衡器,与 Tanzu 社区版一起打包提供。入门很容易,但让我们进一步了解文档,并使用 Let's Encrypt 作为具有证书管理器的群集颁发者。

首先,部署 Contour(请务必查看最新版本的文档)。这是一种单行体验,完成后,您将看到一个与特使服务绑定的 IP 地址(或带有 AWS ELB 的 DNS 地址)。

$ tanzu package install contour \
--package-name contour.community.tanzu.vmware.com \
--version 1.18.1

使用 VMware Tanzu Community Edition 设置 Let's Encrypt with Contour

下一步是安装和配置证书管理器。再一次,我们可以按照 Tanzu 社区版的证书管理器文档进行操作,以获得初始组件。

$ tanzu package install cert-manager --package-name cert-manager.community.tanzu.vmware.com --version 1.5.3

使用 VMware Tanzu Community Edition 设置 Let's Encrypt with Contour

证书管理器需要群集颁发者来创建和提供 TLS 证书。我们将创建两个 ClusterIssuer:一个用于 Let's Encrypt 暂存,另一个用于生产。暂存没有速率限制强制实施,而生产用于使用完全 TLS 加密的通信。其中大部分都记录在 Contour 的开源文档中。确保可以联系到引用的电子邮件。

分期:

cat <<EOF | kubectl apply --filename -
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
namespace: cert-manager
spec:
acme:
email: certs@mydomain.com
privateKeySecretRef:
name: letsencrypt-staging
server: https://acme-staging-v02.api.letsencrypt.org/directory
solvers:
- http01:
ingress:
class: contour
EOF

生产:

kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
namespace: cert-manager
spec:
acme:
email: prodcerts@mydomain.com
privateKeySecretRef:
name: letsencrypt-prod
server: https://acme-v02.api.letsencrypt.org/directory
solvers:
- http01:
ingress:
class: contour
EOF

现在,让我们部署一个简单的 NGINX 容器:

$ kubectl create deployment my-nginx --image=nginx

此时,NGINX服务器正在运行,但由于它尚未对外公开,因此无法访问它。下一阶段是创建一个通用的 Kubernetes 服务,但不指定类型(例如 LoadBalancer)。这将创建一个我们可以绑定到入口控制器的服务:

$ kubectl create deployment nginx --image nginx
$ cat <<EOF | kubectl apply --filename -
apiVersion: v1
kind: Service
metadata:
name: my-nginx
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: my-nginx
EOF

若要执行一些初始测试,让我们在入口规则上使用 Let's Encrypt 暂存服务器。请注意注释部分:

$ cat <<EOF | kubectl apply --filename -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-nginx
annotations:
cert-manager.io/cluster-issuer: letsencrypt-staging
ingress.kubernetes.io/force-ssl-redirect: "true"
kubernetes.io/ingress.class: contour
kubernetes.io/tls-acme: "true"
spec:
tls:
- secretName: my-nginx-tls
hosts:
- my-nginx.mydomain.com
rules:
- host: my-nginx.mydomain.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: my-nginx
port:
number: 80
EOF

我们快到了。要通过 DNS 访问它,需要在 DNS 服务器中创建一条记录,该记录指向第一步中 Envoy 代理的地址。对于 AWS,您需要创建指向 ELB 资源的别名记录。vSphere、Azure 和其他云将具有指向 IP 的 A 记录。任何内部操作都可以在 DNS 服务器上完成,也可以使用本地计算机上的 /etc/hosts 进行修改。

使用 VMware Tanzu Community Edition 设置 Let's Encrypt with Contour

DNS 记录传播生效后,我们可以 https://my-nginx.mydomain.com 访问我们的应用程序,并且应该会看到证书错误,这是意料之中的。

使用 VMware Tanzu Community Edition 设置 Let's Encrypt with Contour

接受证书后,我们可以在浏览器 url 栏中看到“不安全”。这是使用暂存证书的预期行为。

使用 VMware Tanzu Community Edition 设置 Let's Encrypt with Contour

当您准备好投入生产并使证书错误消失时,请编辑入口规则并将集群颁发者设置为 letsencrypt-prod。这将使用新的颁发者重新颁发证书。关闭选项卡并重新打开,看到错误警告消失。

使用 VMware Tanzu Community Edition 设置 Let's Encrypt with Contour

如果您想了解有关 Tanzu 社区版的更多信息,请查看最新的技术概述视频,并在 Tanzu 开发人员中心动手实践。

作者简介

Kendrick Coleman是一个经过改革的系统管理员和虚拟化迷。他的注意力已经从虚拟机管理程序转移到专注于容器的云原生平台。作为开源技术产品经理,他想出了使用 VMware 产品运行开源云原生基础架构工具的有趣新方法。他参与了 Kubernetes SIG 社区,并经常在博客上谈论他正在学习的所有内容。他曾在DockerCon,OpenSource Summit,ContainerCon,CloudNativeCon等平台上发表演讲。他的空闲时间用于分享波旁威士忌行业知识,主持波旁追求播客。