更新时间:2024-01-04 GMT+08:00

HTTPS类型负载均衡证书一致性检查

检查项内容

检查HTTPS类型负载均衡所使用的证书,是否在ELB服务侧被修改。

解决方案

该问题的出现,一般是由于用户在CCE中创建HTTPS类型Ingress后,直接在ELB证书管理功能中修改了Ingress引用的证书,导致CCE集群中存储的证书内容与ELB侧不一致,进而导致升级后ELB侧证书被覆盖。

  1. 请登录ELB服务控制台,在“弹性负载均衡 > 证书管理”界面找到该证书,在证书描述字段中找到对应的secret_id。

    该secret_id即为集群中对应Secret的metadata.uid字段,可以根据该uid查询集群中Secert的名称。

    您可以通过以下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>

  2. 仅v1.19.16-r2、v1.21.5-r0、v1.23.3-r0及以上版本的集群支持使用ELB服务中的证书,上述版本集群请参考方案一处理,其他版本集群请参考方案二处理。

    • 方案一:您可以将Ingress使用的证书替换为ELB服务器证书,即可通过ELB控制台创建或编辑该证书。
      1. 请登录CCE控制台,前往“服务”页面并选择“路由”页签,找到使用该证书的路由,单击“更多 > 更新”。注意,这里可能有多个Ingess引用该证书,所涉及的Ingress都需要进行更新,可以根据Ingress的yaml文件的spec.tls中secertName字段判断是否引用该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>
      2. 在监听器配置中,选择服务器证书来源为“ELB服务器证书”,该证书可通过ELB控制台创建或编辑,单击“确定”。
      3. 在“配置项与密钥”界面删除对应的Secert,删除前建议先备份。
    • 方案二:您可以将Ingress使用的证书,覆写到集群对应的Secret资源中,避免在升级时出现ELB侧证书被更新。

      请登录CCE控制台,前往“配置项与密钥”页面找到该Secret并编辑,填入您正在使用的证书并保存。