HOME

Contour证书管理方法

介绍

Contour 是基于 Envoy 的 Kubernetes Ingress Controller,广泛应用于服务网格和应用网关中。在使用 Contour 管理 HTTP 和 HTTPS 资源时,安全性和证书管理是至关重要的环节。本文将详细介绍如何有效管理和配置 Contour 中的 TLS 证书。

安装与配置

在开始证书管理之前,确保已成功安装了 Contour 并且能够正常运行。一般可以通过 Helm 或直接部署 YAML 文件来安装 Contour。

1. 使用 Helm 安装

使用 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

2. 使用 YAML 部署

也可以直接通过 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),通过声明式方法配置证书信息。

1. 创建 TLS Secret

在部署 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

2. 配置 TLS 资源

使用上述创建的 TLS Secret,配置 Contour 的 TLS 资源以确保安全通信:

apiVersion: projectcontour.io/v1
kind: TLS
metadata:
  name: my-tls
spec:
  secretName: my-tls-secret

3. 使用 TLS 资源

在创建 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 使用自动续期工具来管理证书。

1. 安装 Cert-manager

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

2. 创建 Issuer 或 ClusterIssuer

配置 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

3. 创建 TLS Secret

通过 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 环境中的顺利运行。