操作场景
本文档介绍 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
apiVersion: v1
stringData:
qcloud_cert_id: Xxxxxxxx
qcloud_ca_cert_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. 登录负载均衡控制台,选择左侧导航栏中的 证书管理。 2. 在“证书管理”页面中,单击新建。
3. 在弹出的“新建证书”窗口中,参考以下信息进行设置。
证书名称:自定义设置。
证书类型:选择“服务器证书”。服务器证书即 SSL 证书(SSL Certificates)。基于 SSL 证书,可将站点由 HTTP(Hypertext Transfer Protocol)切换到 HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),即基于安全套接字层(SSL)进行安全数据传输的加密版 HTTP 协议。
4. 单击提交即可完成创建。
创建使用证书的 Ingress 对象
注意事项:
当控制台创建的 Ingress 开启 HTTPS 服务,会先创建同名的 Secret 资源用于存放证书 ID,并在 Ingress 中使用并监听该 Secret。
TLS 配置域名与证书的对应关系如下:
可以使用一级泛域名统配。
若域名匹配中多个不同的证书,将随机选择一个证书,不建议相同域名使用不同证书。
需为所有 HTTPS 域名配置证书,否则会创建不通过。
操作步骤:
修改证书
注意事项:
如果您需要修改证书, 请确认所有使用该证书的 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 对象
2. 在“集群管理”页面,选择需修改 Ingress 的集群 ID。
3. 在集群详情页,选择左侧服务与路由 > Ingress。如下图所示: 4. 单击目标 Ingress 所在行右侧的更新转发配置。
5. 在“更新转发配置”页面中,根据实际情况进行转发配置规则更新。
6. 单击更新转发配置即可完成更新操作。
执行以下命令,使用默认编辑器打开需修改的 ingress,修改 yaml 文件并保存即可完成更新操作。
kubectl edit ingress <ingressname> -n <namespaces>
本页内容是否解决了您的问题?