Ingress 证书配置

最近更新时间:2024-04-22 09:59:41

我的收藏

操作场景

本文档介绍 Ingress 证书使用相关的内容,您可在以下场景中进行 Ingress 证书配置:
创建 Ingress 选用 HTTPS 监听协议时,选用合适的服务器证书能够确保访问安全。
为所有的 HTTPS 域名绑定同一个证书,简化配置 Ingress 下所有 HTTPS 规则的证书,使更新操作更加便捷。
为不同的域名绑定不同的证书,改善服务器与客户端 SSL/TLS。

注意事项

需提前创建需配置的证书,详情请参见 通过控制台新建服务器证书
需使用 Secret 形式来设置 Ingress 证书,其内容包含证书 ID。
若您需要更换证书,建议在证书平台新建一个证书,然后更新 Secret 的证书 ID。因为集群中组件的同步会以 Secret 的声明为准,若您直接在其他证书服务、负载均衡服务上更新的证书,将会被 Secret 里的内容还原。
Secret 证书资源需和 Ingress 资源放置在同一个 Namespace 下。
通常情况下,在创建 Ingress 时,不会复用 Secret 关联的证书资源。但仍支持在创建 Ingress 复用 Secret 关联的证书资源,更新 Secret 时,会同步更新所有引用该 Secret 的 Ingress 的证书。
为域名增加匹配证书后,将同步开启负载均衡 CLB SNI 功能(不支持关闭)。若删除证书对应的域名,则该证书将默认匹配 Ingress 所对应的 HTTPS 域名。
传统型负载均衡不支持基于域名和 URL 的转发,由传统型负载均衡创建的 Ingress 不支持配置多证书。

示例

TKE 支持通过 Ingress 中的 spec.tls 的字段,为 Ingress 创建的 CLB HTTPS 监听器配置证书。其中,secretName 为包含腾讯云证书 ID 的 Kubernetes Secret 资源。示例如下:

Ingress

通过 YAML 创建:
spec:
tls:
- hosts:
- www.abc.com
secretName: secret-tls-2

Secret

通过 YAML 创建
通过控制台创建
apiVersion: v1
stringData:
qcloud_cert_id: Xxxxxxxx ## 配置证书 ID 为 Xxxxxxxx
qcloud_ca_cert_id: Xxxxxxxx ## 配置证书 ID 为 Xxxxxxxx。仅配置双向证书时需要,见下面的“注意”。
kind: Secret
metadata:
name: tencent-com-cert
namespace: default
type: Opaque
您可以通过容器服务控制台创建,操作详情可参考 创建 Secret。 在新建 Secret 页面,Secret 主要参数配置如下:
名称:自定义,本文以 cos-secret 为例。
Secret 类型:选择 Opaque,该类型适用于保存密钥证书和配置文件,Value 将以 Base64 格式编码。
生效范围:按需选择,需确保与 Ingress 在同一 Namespace 下。
内容:变量名设置为 qcloud_cert_id,变量值配置为服务器证书所对应的证书 ID。
注意:
若您需要配置双向证书,则 Secret 除了要添加“服务器证书”外,还需要添加“客户端 CA 证书”。此时该 Secret 还需要额外添加一个键值对:变量名为:qcloud_ca_cert_id,变量值配置为“客户端CA证书”所对应的证书 ID。

Ingress 证书配置行为

仅配置单个 spec.secretName 且未配置 hosts 的情况下,将会为所有的 HTTPS 的转发规则配置该证书。示例如下:
spec:
tls:
- secretName: secret-tls
支持配置一级泛域名统配。 示例如下:
spec:
tls:
- hosts:
- "*.abc.com"
secretName: secret-tls
若同时配置证书与泛域名证书,将优先选择一个证书。 示例如下,www.abc.com 将会使用 secret-tls-2 中描述的证书。
spec:
tls:
- hosts:
- "*.abc.com"
secretName: secret-tls-1
- hosts:
- www.abc.com
secretName: secret-tls-2
对已使用多个证书的 Ingress 进行更新时,TKE Ingress controller 将进行以下行为判断:
HTTPS 的 rules.host 无任何匹配时,若判断不通过,则不能提交更新。
HTTPS 的 rules.host 匹配中单个 TLS 时,可提交更新,并为该 host 配置对 Secret 中对应的证书。
修改 TLS 的 SecretName 时仅校验 SecretName 的存在性,而不校验 Secret 内容,Secret 存在即可提交更新。
注意:
请确保 Secret 中证书 ID 符合要求。

操作步骤

通过控制台新建服务器证书

说明:
若您已具备需配置的证书,则请跳过此步骤。
1. 登录 SSL 证书控制台,选择左侧导航栏中的 我的证书
2. 根据自身需求选择购买证书申请免费证书上传证书的方式来创建证书。

创建使用证书的 Ingress 对象

注意事项:

TLS 配置域名与证书的对应关系如下:
可以使用一级泛域名统配。
若域名匹配中多个不同的证书,将随机选择一个证书,不建议相同域名使用不同证书。
需为所有 HTTPS 域名配置证书,否则会创建不通过。

操作步骤:

参考 创建 Ingress 完成 Ingress 新建,其中监听端口勾选 Https:443

修改证书

注意事项:

如果您需要修改证书, 请确认所有使用该证书的 Ingress。如用户的多个 Ingress 配置使用同一个 Secret 资源,那么这些 Ingress 对应 CLB 的证书会同步变更。
证书需要通过修改 Secret 进行修改, Secret 内容中包含您使用的腾讯云证书的 ID。

操作步骤:

1. 执行以下命令,使用默认编辑器打开需修改的 Secret。其中,[secret-name] 需更换为需修改的 Secret 的名称。
kubectl edit secrets [secret-name]
2. 修改 Secret 资源,将 qcloud_cert_id 的值修改为新的证书 ID。 与创建 Secret 相同,修改 Secret 证书 ID 需要进行 Base64 编码,请根据实际需求选择 Base64 手动编码或者指定 stringData 进行 Base64 自动编码。

更新 Ingress 对象

通过控制台更新
通过 YAML 更新
1. 登录 腾讯云容器服务控制台 ,选择左侧导航栏中的集群
2. 集群页面,选择集群 ID,进入集群详情页。
3. 服务与路由 > Ingress 中,单击目标 Ingress 所在行右侧的更新转发配置。如下图所示:


4. 更新转发配置页面,根据实际情况进行转发配置规则更新。
5. 单击更新转发配置即可完成更新操作。
执行以下命令,使用默认编辑器打开需修改的 ingress,修改 yaml 文件并保存即可完成更新操作。
kubectl edit ingress <ingressname> -n <namespaces>