Contour 是基于 Envoy 的 Kubernetes Ingress Controller,广泛应用于服务网格和应用网关中。在使用 Contour 管理 HTTP 和 HTTPS 资源时,安全性和证书管理是至关重要的环节。本文将详细介绍如何有效管理和配置 Contour 中的 TLS 证书。
在开始证书管理之前,确保已成功安装了 Contour 并且能够正常运行。一般可以通过 Helm 或直接部署 YAML 文件来安装 Contour。
使用 Helm 安装 Contour 可以简化部署过程。首先,添加 ConTour 的 Helm 仓库:
helm repo add contour https://projectcontour.io/helm-charts/
然后,根据需要配置并安装 Contour:
helm install mycontour contour/contour \
--set global.envoy.ports.http2=443 \
--set global.envoy.ports.http1=80
也可以直接通过 YAML 文件部署 Contour。以下是一个基本的示例:
apiVersion: projectcontour.io/v1
kind: Contour
metadata:
name: mycontour
spec:
global:
envoy:
ports:
- port: 80
name: http
protocol: HTTP
- port: 443
name: https
protocol: HTTPS
Contour 支持使用内置的 TLS 资源进行证书管理。TLS 资源是 Kubernetes 自定义资源定义(CRD),通过声明式方法配置证书信息。
在部署 Contour 的同时,可以创建一个包含 TLS 证书和私钥的 Secret:
kubectl create secret tls my-tls-secret --key mydomain.key --cert mydomain.crt
或者直接将密钥和证书内容加入 Kubernetes 中:
apiVersion: v1
kind: Secret
metadata:
name: my-tls-secret
type: kubernetes.io/tls
data:
tls.crt: base64-encoded-certificate
tls.key: base64-encoded-private-key
使用上述创建的 TLS Secret,配置 Contour 的 TLS 资源以确保安全通信:
apiVersion: projectcontour.io/v1
kind: TLS
metadata:
name: my-tls
spec:
secretName: my-tls-secret
在创建 Ingress 规则时,引用上述配置的 TLS 资源:
apiVersion: projectcontour.io/v1
kind: HTTPRoute
metadata:
name: example-httproute
spec:
routes:
- matches:
host: mydomain.com
services:
- name: myservice
port: 80
tls:
sniHosts:
- mydomain.com
为了确保证书的安全性和可用性,建议使用自动化工具进行证书管理。例如,可以结合 Let’s Encrypt 使用自动续期工具来管理证书。
Cert-manager 是一个用于 Kubernetes 的开源项目,支持多种 CA(如 Let’s Encrypt)和 TLS 资源的自动创建与续签。
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.7.3/cert-manager.yaml
配置 Cert-manager 以使用 Let’s Encrypt:
apiVersion: certmanager.k8s.io/v1
kind: Issuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: user@example.com
privateKeySecretRef:
name: example-private-key
solvers:
- http01:
ingress:
class: contour-certmanager-webhook
通过 Cert-manager 自动创建并更新 TLS Secret:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: example-tls-secret
spec:
secretName: example-tls-secret
issuerRef:
name: letsencrypt-prod
kind: Issuer
通过以上步骤,可以有效地管理和配置 Contour 中的 TLS 证书。这不仅提高了安全性还简化了运维工作。结合自动化工具,Contour 能够提供一个安全且可靠的证书管理方案,确保应用和服务在 Kubernetes 环境中的顺利运行。