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
这个页面对您有帮助吗?
有用
有用
无用
无用