Ingress 证书配置
最近更新时间: 2025-02-18 16:02:00
操作场景
本文档介绍 Ingress 证书使用相关的内容,您可在以下场景中进行 Ingress 证书配置:
- 创建 Ingress 选用 HTTPS 监听协议时,选用合适的服务器证书能够确保访问安全。
- 为所有的 HTTPS 域名绑定同一个证书,简化配置 Ingress 下所有 HTTPS 规则的证书,使更新操作更加便捷。
- 为不同的域名绑定不同的证书,改善服务器与客户端 SSL/TLS。
注意事项
- 需提前创建需配置的证书,详情请参见 通过控制台新建服务器证书。
- 需使用 Secret 形式来设置 Ingress 证书。云容器服务 TKE Ingress 会默认创建同名 Secret,其内容包含证书 ID。
- 若您需要更换证书,建议在证书平台新建一个证书,然后更新 Secret 的证书 ID。因为集群中组件的同步会以 Secret 的声明为准,若您直接在其他证书服务、负载均衡服务上更新的证书,将会被 Secret 里的内容还原。
- Secret 证书资源需和 Ingress 资源放置在同一个 Namespace 下。
- 由于控制台默认会创建同名 Secret 证书资源,若同名 Secret 资源已存在,则 Ingress 将无法创建。
- 通常情况下,在创建 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: abcd-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 符合要求。
操作步骤
通过控制台新建服务器证书
说明
若您已具备需配置的证书,则请跳过此步骤。
- 登录负载均衡控制台,选择左侧导航栏中的证书管理。
- 在“证书管理”页面中,单击新建。
- 在弹出的“新建证书”窗口中,参考以下信息进行设置。
- 证书名称:自定义设置。
- 证书类型:选择“服务器证书”。服务器证书即 SSL 证书(SSL Certificates)。基于 SSL 证书,可将站点由 HTTP(Hypertext Transfer Protocol)切换到 HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),即基于安全套接字层(SSL)进行安全数据传输的加密版 HTTP 协议。
- 证书内容:根据实际情况填写证书内容,证书格式要求请参见文档SSL 证书格式要求及格式转换说明。
- 密钥内容:仅当证书类型选择为“服务器证书”时,该选项才会显示。请参考文档SSL 证书格式要求及格式转换说明 添加相关密钥内容。
- 单击提交即可完成创建。
创建使用证书的 Ingress 对象
注意事项:
- 当控制台创建的 Ingress 开启 HTTPS 服务,会先创建同名的 Secret 资源用于存放证书 ID,并在 Ingress 中使用并监听该 Secret。
- TLS 配置域名与证书的对应关系如下:
- 可以使用一级泛域名统配。
- 若域名匹配中多个不同的证书,将随机选择一个证书,不建议相同域名使用不同证书。
- 需为所有 HTTPS 域名配置证书,否则会创建不通过。
操作步骤:
参考 创建 Ingress 完成 Ingress 新建,其中监听端口勾选 Https:443。
修改证书
注意事项:
- 如果您需要修改证书, 请确认所有使用该证书的 Ingress。如用户的多个 Ingress 配置使用同一个 Secret 资源,那么这些 Ingress 对应 CLB 的证书会同步变更。
- 证书需要通过修改 Secret 进行修改, Secret 内容中包含您使用的云证书的 ID。
操作步骤:
执行以下命令,使用默认编辑器打开需修改的 Secret。其中,
[secret-name]
需更换为需修改的 Secret 的名称。kubectl edit secrets [secret-name]
修改 Secret 资源,将
qcloud_cert_id
的值修改为新的证书 ID。 与创建 Secret 相同,修改 Secret 证书 ID 需要进行 Base64 编码,请根据实际需求选择 Base64 手动编码或者指定stringData
进行 Base64 自动编码。
更新 Ingress 对象
通过控制台更新
登录容器服务控制台 ,选择左侧导航栏中的集群。
在“集群管理”页面,选择需修改 Ingress 的集群 ID。
在集群详情页,选择左侧服务 > Ingress。
单击目标 Ingress 所在行右侧的更新转发配置。
在“更新转发配置”页面中,根据实际情况进行转发配置规则更新。
单击更新转发配置即可完成更新操作。
通过 YAML 更新
执行以下命令,使用默认编辑器打开需修改的 ingress,修改 yaml 文件并保存即可完成更新操作。
kubectl edit ingress <ingressname> -n <namespaces>