HTTPS类型负载均衡证书一致性检查异常处理
检查项内容
检查HTTPS类型负载均衡所使用的证书,是否在ELB服务侧被修改。
解决方案
该问题的出现,一般是由于用户在CCE中创建HTTPS类型Ingress后,直接在ELB证书管理功能中修改了Ingress引用的证书,导致CCE集群中存储的证书内容与ELB侧不一致,进而导致升级后ELB侧证书被覆盖。
- 请登录ELB服务控制台,在“弹性负载均衡 > 证书管理”界面找到该证书,在证书描述字段中找到对应的secret_id。
图1 查询证书
该secret_id即为集群中对应Secret的metadata.uid字段,可以根据该uid查询集群中Secret的名称。
您可以通过以下kubectl命令进行查询,其中<secret_id>请自行替换。kubectl get secret --all-namespaces -o jsonpath='{range .items[*]}{"uid:"}{.metadata.uid}{" namespace:"}{.metadata.namespace}{" name:"}{.metadata.name}{"\n"}{end}' | grep <secret_id>
- 仅v1.19.16-r2、v1.21.5-r0、v1.23.3-r0及以上版本的集群支持使用ELB服务中的证书,上述版本集群请参考方案一处理,其他版本集群请参考方案二处理。
- 方案一:您可以将Ingress使用的证书替换为ELB服务器证书,即可通过ELB控制台创建或编辑该证书。
- 请登录CCE控制台,前往“服务”页面并选择“路由”页签,找到使用该证书的路由,单击“更多 > 更新”。注意,这里可能有多个Ingess引用该证书,所涉及的Ingress都需要进行更新,可以根据Ingress的yaml文件的spec.tls中secretName字段判断是否引用该Secret中的证书。
您可以通过以下kubectl命令进行查询引用该证书的Ingress,其中<secret_name>请自行替换。
kubectl get ingress --all-namespaces -o jsonpath='{range .items[*]}{"namespace:"}{.metadata.namespace}{" name:"}{.metadata.name}{" tls:"}{.spec.tls[*]}{"\n"}{end}' | grep <secret_name>
- 在监听器配置中,选择服务器证书来源为“ELB服务器证书”,该证书可通过ELB控制台创建或编辑,单击“确定”。
- 在“配置与密钥”界面删除对应的Secret,删除前建议先备份。
- 请登录CCE控制台,前往“服务”页面并选择“路由”页签,找到使用该证书的路由,单击“更多 > 更新”。注意,这里可能有多个Ingess引用该证书,所涉及的Ingress都需要进行更新,可以根据Ingress的yaml文件的spec.tls中secretName字段判断是否引用该Secret中的证书。
- 方案二:您可以将Ingress使用的证书,覆写到集群对应的Secret资源中,避免在升级时出现ELB侧证书被更新。
请登录CCE控制台,前往“配置与密钥”页面找到该Secret并编辑,填入您正在使用的证书并保存。
图2 修改Secret
- 方案一:您可以将Ingress使用的证书替换为ELB服务器证书,即可通过ELB控制台创建或编辑该证书。