不同命名空间下的Ingress共用监听器时如何同步生效的证书?
问题背景
在同一个集群中,多个Ingress可以使用同一个监听器(即使用同一个负载均衡器的同一个端口)。如果两个Ingress均配置了HTTPS证书,则生效的服务器证书将以最早创建的Ingress配置为准。
但是不同命名空间下的Ingress对接同一个监听器且使用TLS密钥类型证书时,由于命名空间隔离,后创建的Ingress可能出现无法正常显示TLS密钥对应Secret的场景。
例如,两个Ingress配置如下:
Ingress名称 |
ingress1 |
ingress2 |
---|---|---|
命名空间 |
namespace1 |
namespace2 |
创建时间 |
2024/04/01 |
2024/04/02 |
协议 |
https |
https |
负载均衡器 |
elb1 |
elb1 |
端口 |
443 |
443 |
证书来源 |
TLS密钥 |
TLS密钥 |
TLS密钥对应secret |
namespace1/secret1 |
namespace2/secret2 |
实际生效的证书 |
namespace1/secret1 |
namespace1/secret1 |
问题现象
在同一个集群中,在namespace1创建ingress1,在namespace2创建ingress2,两个Ingress对接同一个监听器,使用了TLS密钥类型的证书。
由于ingress1创建时间早于ingress2,所以实际生效证书以ingress1为准。但ingress2所在命名空间不是namespace1,无法读到secret1的配置,在ingress2的配置页面将出现以下提示。
解决方案
由于每一个TLS密钥对应ELB的一个证书,且密钥内容相同,ELB证书信息的获取是使用CCE委托权限,获取不受命名空间约束。因此可以通过修改ingress1的证书来源为服务器证书,并配置证书为TLS密钥对应的ELB证书,在ingress2的配置修改页面可以看到实际生效的服务器证书。
- 登录CCE控制台,单击集群名称进入集群。
- 选择左侧导航栏的“服务”,在右侧选择“路由”页签,单击ingress1路由对应的负载均衡器链接跳转到ELB页面。
- 切换至“监听器”页签,根据ingress1配置的端口,在负载均衡器页面找到对应的监听器,并单击监听器名称进入详情。
- 在监听器详情页面,找到服务器证书并记录。
- 在CCE控制台中,单击ingress1的“更多 > 更新”,选择证书来源为ELB服务器证书,并配置为上一步骤查询到的服务器证书,单击“确定”更新Ingress配置。
ingress1的证书来源由TLS密钥更换为服务器证书,且更换前后密钥内容一致,实际生效的配置在更换前后不变。
- 切换至namespace2,单击ingress2的“更多 > 更新”,单击服务器证书下方的“同步”按钮,并单击“确定”更新Ingress配置。
- 更新完成后ingress2的配置显示正常。