You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
证书与安全
为 ALB Ingress 配置 HTTPS 证书
复制全文
下载 pdf
为 ALB Ingress 配置 HTTPS 证书
为保证公网环境下的通信安全,业务使用 Ingress 暴露到公网时,通常使用 HTTPS 协议通信。本文为您介绍如何为 ALB Ingress 配置 HTTPS 协议的证书。​
注意​
配置 ALB Ingress 前,请务必仔细阅读 ALB Ingress 使用注意事项。​
证书分类​
从证书生效的范围区分,ALB 支持如下类型的证书。​
​
证书类型​
配置方式​
证书管理​
默认证书​
  • 当监听协议配置为 HTTPS 时,必填。​
  • 每个监听器只允许配置一个默认证书。​
  • 配置 ALB Ingress、ALBInstance 时,无需填写域名。​
  • 支持更新证书。​
  • 不支持删除证书。​
扩展证书​
  • 当监听协议配置为 HTTPS 时,必填。​
  • 每个监听器可以配置多个扩展证书。​
  • 配置 ALB Ingress、ALBInstance 时,需要同时配置扩展证书对应的域名。​
  • 支持更新证书。​
  • 支持删除证书。​
​
说明​
ALB 会根据域名、转发规则和证书的对应关系选择发送给客户端的证书,详细流程,请参见 为 HTTPS 监听器配置多本证书(基础版)、为 HTTPS 监听器配置多本证书(标准版)。​
从证书的来源区分,ALB 支持如下类型的证书。​
​
证书来源​
说明​
ALB 证书​
从其他渠道(其他证书签发机构、使用 OpenSSL 创建)获得的证书后,将证书上传到 ALB 控制台进行统一管理和使用。详情请参见 添加/删除证书。​
证书中心证书​
证书中心 是数字证书的全生命周期管理平台,提供 SSL 证书和私有 CA 服务。您可以通过证书中心,实现 SSL 证书订购、签发、续费、上传、部署等 SSL 证书管理服务。更多详情,请参见 ALB 使用证书中心的证书。​
您可以在证书中心直接购买证书,或将从其他渠道获得的证书上传至证书中心,实现证书的统一的管理和使用。​
说明​
  • 推荐优先选择证书中心管理证书。​
  • 当容器服务集群对接 ALB 标准版实例时,仅支持使用证书中心管理的证书,不支持使用 ALB 控制台管理的证书。​
​
配置证书​
资源说明​
在容器服务集群中配置 ALB Ingress 时,主要涉及到如下 Kubernetes 资源。​
​
资源名称​
资源说明​
是否允许配置证书​
ALBInstance​
自定义资源,主要用于配置 ALB 实例和监听器。​
允许,在albinstance.spec中指定证书 ID 即可。详情请参见 在 ALBInstance 上指定证书 ID。​
Ingress​
标准 Kubernetes 资源对象,主要用于在 ALB 实例上配置转发规则和后端服务器。​
允许,在 Ingress.spec中指定包含证书信息(证书 ID 或证书的密钥)的 Secret。详情请参见 使用 Secret 指定证书 ID、使用 TLS 类型 Secret 指定证书内容。​
​
说明​
Ingress 和 albinstance 的详细介绍,请参考 通过 kubectl 创建 ALB Ingress。​
配置方式​
ALB Ingress 支持以下几种证书配置方式,不同方式的区别和适用场景,如下表所示。​
​
配置方式​
证书来源​
适用场景​
使用 Secret 指定证书 ID​
ALB 证书。​
已在 ALB 控制台上传证书。​
​
证书中心证书。​
已在证书中心购买或上传证书。​
使用 TLS 类型 Secret 指定证书内容​
将证书和密钥信息填写到 Secret 中,VKE 会将密钥信息上传到证书中心。​
在集群内部使用 cert-manager 工具自动更新 Secret 中的证书信息。​
使用 ALBInstance 指定证书​
ALB 证书。​
已在 ALB 控制台上传证书​
​
证书中心证书。​
已在证书中心购买或上传证书。​
​
注意​
如需使用证书中心的证书,请首先登录您的火山引擎账号,然后单击 服务授权,并在弹出的页面中单击 立即授权,完成跨服务授权。​
生效逻辑​
ALB 实例的证书是监听器级别的配置,Ingress 和 ALBInstance 都可以为监听器指定证书。因此,对于同一个监听器而言,可能有一个 ALBInstance + 多个 Ingress 与之关联。同时,这些关联资源上配置的证书可能存在差异。当多个资源上均配置了证书,且证书之间存在冲突时,VKE 集群中的生效逻辑为:选取到期时间最久的证书关联到 ALB 实例上。​
例如:假设 ALB 实例中存在 80 监听器,Ingress-A、Ingress-B、Ingress-C 分别配置证书 A、B、C,ALBInstance 配置证书 D,假设证书 C 的到期时间最久,则 VKE 最终会为 ALB 实例关联证书 C。​
​​​
例外场景​
为了防止由于误修改/删证书导致流量中断,VKE 集群针对以下场景做了例外处理。​
​
基于 Hash 值的安全防护
证书删除保护
​
除了配置 ALB Ingress 或 ALBInstance 时为 ALB 添加证书外,有时用户还习惯直接在 ALB 控制台中直接修改对应 ALB 实例监听器的关联证书。为了避免用户在 ALB 控制台中手动添加或修改的证书被 alb-ingress-controller 在调谐时,根据 ALB Ingress/ALBInstance 中的配置覆盖,alb-ingress-controller 使用证书 Hash 值做了额外防护,即在 Hash 值不变的情况下,不主动修改 ALB 证书配置。主要场景和举例,如下表所示。​
​
场景​
举例​
Hash 值不变时,alb-ingress-controller 不主动修改证书。​
  • 在 ALB Ingress 上配置证书 cert-a,alb-ingress-controller 为 ALB 关联证书 cert-a,并记录证书 Hash 值 hash-a。​
  • 用户在 ALB 控制台中将证书修改为 cert-b。​
  • ALB Ingress 触发调谐时,alb-ingress-controller 在调谐过程中发现记录的证书 Hash 值仍然为 hash-a,则跳过修改证书步骤,因此 ALB 仍然关联证书 cert-b。​
Hash 值改变时,alb-ingress-controller 修改证书。​
  • 在 ALB Ingress 上配置证书 cert-a,alb-ingress-controller 为 ALB 关联证书 cert-a,并记录证书 Hash 值 hash-a。​
  • 用户在 ALB 控制台中将证书修改为 cert-b。​
  • 在 ALB Ingress 上配置证书 cert-c,alb-ingress-controller 在调谐过程中发现 ALB Ingress 当前计算出的证书 Hash 值为 hash-c,与之前记录的 hash-a 不一致,则进入修改 ALB 证书逻辑,将 ALB 关联的证书修改为 cert-c。​
​
​
​
配置示例​
默认证书 vs 扩展证书​
创建 Ingress 时,使用 Secret 指定默认证书或扩展证书,示例如下:​
​
apiVersion: networking.k8s.io/v1​
kind: Ingress​
metadata:​
name: alb-ingress-demo​
namespace: default​
annotations:​
ingress.vke.volcengine.com/loadbalancer-port: "443" # 监听器端口号​
ingress.vke.volcengine.com/loadbalancer-protocol: "https" # 监听器协议。本例中取值为 https​
spec:​
ingressClassName: alb # ALB Instance 的资源名称​
rules:​
- host: example.com # 需要对外提供访问的域名​
http:​
paths:​
- pathType: Prefix​
path: / ​
backend:​
service:​
name: service-demo​
port: ​
number: 80​
tls:​
- secretName: https-secret-demo # 默认证书对应的 Secret,不指定域名​
- secretName: https-secret-demo-extension # 扩展证书对应的 Secret​
hosts:​
- example.com # 扩展证书对应的域名​
​
使用 ALBInstance 配置默认证书或扩展证书,示例如下:​
​
apiVersion: loadbalancer.vke.volcengine.com/v1beta1​
kind: ALBInstance​
metadata:​
name: alb # ALBInstance 资源名称​
spec:​
instance:​
name: "demo-alb"​
zoneMappings:​
- subnetId: "subnet-bp12mw1f8k3jg0****"​
addressType: "public"​
eipSpec:​
isp: "BGP"​
bandwidth: 10​
billingType: 2​
ipVersion: "ipv4"​
deleteProtection: "on"​
listeners:​
- protocol: "HTTPS" # 监听器的协议​
port: 443 # 监听器协议为 HTTPS 时的监听端口​
certificateSource: "alb" # 默认证书的来源,取值:alb(ALB)、cert_center(证书中心)​
certificateID: "cert-2wx20lm7uquww7oot********" # 默认证书 ID​
domainExtensions: # 扩展证书,为具体域名单独配置证书​
- domain: "example.com" # 扩展证书对应的域名​
certificateSource: "alb" # 扩展证书来源,取值:alb(ALB)、cert_center(证书中心)​
certificateID: "cert-2wx20lo6vuww07oot********" # 扩展证书 ID​
​
使用 Secret 指定证书 ID​
您可以在 Secret 中填写证书 ID,然后在配置 Ingress 时关联 Secret。示例如下:​
​
apiVersion: v1​
kind: Secret​
metadata:​
name: https-secret-demo​
type: Opaque​
data:​
cert_id: Y2V***== # Base64 编码后的证书 ID​
cert_source: YWxi # Base64 编码后的证书来源,包括:YWxi(表示 alb)和 Y2VydF9jZW50ZXI=(表示 cert_center,即证书中心)​
---​
apiVersion: networking.k8s.io/v1​
kind: Ingress​
metadata:​
name: alb-ingress-demo​
namespace: default​
annotations:​
ingress.vke.volcengine.com/loadbalancer-port: "443" # 监听器端口号​
ingress.vke.volcengine.com/loadbalancer-protocol: "https" # 监听器协议。本例中取值为 https​
spec:​
ingressClassName: alb # ALB Instance 的资源名称​
rules:​
- host: example.com​
http:​
paths:​
- pathType: Prefix​
path: /​
backend:​
service:​
name: service-demo​
port: ​
number: 80​
tls:​
- secretName: https-secret-demo # 默认证书对应的 Secret,不指定域名​
- secretName: https-secret-demo # 扩展证书对应的 Secret​
hosts:​
- example.com # 扩展证书对应的域名​
​
说明​
您可以使用echo -n "${cert}" | base64命令对证书 ID、证书来源等进行 Base64 编码,请将${cert}替换为您自己的实际值。例如当${cert}取值为cert_center时,编码命令为echo -n "cert_center" | base64,编码后的值为Y2VydF9jZW50ZXI=。​
使用 TLS 类型 Secret 指定证书内容​
您可以在 Secret 中填写证书内容,然后在配置 Ingress 时关联 Secret。示例如下:​
​
apiVersion: v1​
kind: Secret​
metadata:​
name: https-secret-demo​
type: kubernetes.io/tls​
data:​
# 在 Secret 中直接指定证书 key、crt 等信息​
tls.key: |​
LS0tLS1CRUdJTiBSU0EgUFJJVkFURS*** # Base64 编码后的 tls.key​
tls.crt: |​
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS*** # Base64 编码后的 tls.crt​
---​
apiVersion: networking.k8s.io/v1​
kind: Ingress​
metadata:​
name: alb-ingress-demo​
namespace: default​
annotations:​
ingress.vke.volcengine.com/loadbalancer-port: "443" # 监听器端口号​
ingress.vke.volcengine.com/loadbalancer-protocol: "https" # 监听器协议。本例中取值为 https​
spec:​
ingressClassName: alb # ALB Instance 的资源名称​
rules:​
- host: example.com​
http:​
paths:​
- pathType: Prefix​
path: /​
backend:​
service:​
name: service-demo​
port: ​
number: 80​
tls:​
- secretName: https-secret-demo # 默认证书对应的 Secret,不指定域名​
- secretName: https-secret-demo # 扩展证书对应的 Secret​
hosts:​
- example.com # 扩展证书对应的域名​
​
在 ALBInstance 上指定证书 ID​
您可以在配置 ALBInstance 时指定证书的 ID。示例如下:​
​
apiVersion: loadbalancer.vke.volcengine.com/v1beta1​
kind: ALBInstance​
metadata:​
name: alb # ALBInstance 资源名称​
spec:​
instance:​
name: "demo-alb"​
zoneMappings:​
- subnetId: "subnet-bp12mw1f8k3jg0****"​
addressType: "public"​
eipSpec:​
isp: "BGP"​
bandwidth: 10​
billingType: 2​
ipVersion: "ipv4"​
deleteProtection: "on"​
listeners:​
- protocol: "HTTPS" # 监听器的协议​
port: 443 # 监听器协议为 HTTPS 时的监听端口​
certificateSource: "alb" # 默认证书来源,取值:alb(ALB)、cert_center(证书中心)​
certificateID: "cert-2wx20lm7uquww7oot********" # 默认证书 ID​
domainExtensions: # 扩展证书​
- domain: "example.com" # 扩展证书对应的域名​
certificateSource: "alb" # 扩展证书来源,取值:alb(ALB)、cert_center(证书中心)​
certificateID: "cert-2wx20lo6vuww07oot********" # 扩展证书 ID​
​
常见问题​
问题 1:使用控制台或 YAML 配置有什么区别?​
两种方式的核心差异在于证书 ID 是否会同步写入 ALBInstance:​
  • 控制台配置:证书 ID 会自动同步到 ALBInstance。移除证书时,证书 ID 也会同步从 ALBInstance 中移除。​
  • YAML 配置:证书 ID 不会同步到 ALBInstance。移除证书时,证书 ID 也不会从 ALBInstance 中移除。​
问题 2:在控制台移除了扩展证书后,扩展证书仍然绑定在 ALB 上​
导致该问题有以下两种可能原因,请按实际情况对应处理:​
  • 可能原因:Ingress 上仍存在使用该证书的转发规则,导致 alb-ingress-controller 跳过了证书删除流程。​
  • 解决方法:确认证书不再使用后,前往应用型负载均衡控制台手动删除该扩展证书。​
  • 可能原因:ALBInstance 曾通过 YAML 编辑,仍记录有该扩展证书的 ID。​
  • 解决方法:确认证书不再使用后,编辑 ALBInstance,手动删除其中的扩展证书 ID。​
问题 3:控制台提示“证书不符合预期”​
导致该问题有以下两种可能原因,请按实际情况对应处理:​
  • 可能原因:直接在 ALB 控制台修改了对应监听器的证书,导致 ALB 上实际生效的证书与 Kubernetes 资源记录不一致。​
  • 解决方法:建议统一在 VKE 侧为 ALB Ingress 绑定证书,避免在 ALB 控制台直接修改。​
  • 可能原因:多个 ALB Ingress 关联同一个 ALB 实例,且不同 Ingress 上配置的证书存在冲突。此时 alb-ingress-controller 会自动选取到期时间最久的证书应用到 ALB 实例上,其余 Ingress 的证书配置未被采用,因此提示"证书不符合预期"。​
  • 解决方法:多个 ALB Ingress 复用同一 ALB 实例时,确保各 Ingress 上配置的证书保持一致。​
配置建议​
统一配置渠道,避免混用​
建议全程使用同一种方式(控制台或 YAML)管理证书,避免两种渠道混合使用,否则可能导致证书状态不一致。​
使用控制台配置证书​
按照控制台页面的引导完成证书配置,并遵循以下原则:​
  • 多个 Ingress 的默认证书保持一致。​
  • 不同 Ingress 各自管理其对应的扩展域名和扩展证书。​
示例如下:​
​
Ingress​
默认证书​
扩展域名​
扩展证书​
Ingress-A​
cert-a​
www.a.com​
cert-b​
Ingress-B​
cert-a​
www.b.com​
cert-c​
​
使用 YAML 配置证书​
根据证书的管理方式选择对应的配置路径:​
  • 已有证书 ID:建议在 ALBInstance 上统一配置证书 ID。​
  • 通过 cert-manager 等组件自行管理证书(含 crt、key 等信息):建议在 Ingress 上配置 TLS Secret。​
​
最近更新时间:2026.09.23 14:37:30
这个页面对您有帮助吗?
有用
有用
无用
无用