IBM Cloud 中的入口
Ingress 是一种 Kubernetes 服务发现方法,通过将请求转发到应用程序并均衡网络流量工作负载,将集群中的服务公开到公用或专用网络。 入口根据您配置并应用于所有入局流量的一组路由规则来管理对服务的外部访问。
供应 IBM Cloud Kubernetes Service 集群时,IBM 将提供使用 Ingress 所需的所有组件。 然后,在准备好开始时,创建 Ingress 资源以指定这些组件如何协同工作。
有关 Kubernetes Ingress 的更多信息,请参阅 Kubernetes 文档。
IBM提供的 Ingress 组件
创建集群时,将为您提供使用 Ingress 所需的所有组件。 在创建 Ingress 资源时指定这些组件。
- 入口域
- 入口类
- 应用程序负载均衡器 (ALB)
- TLS 证书
如果您不希望使用 IBM提供的组件,那么可以 创建您在 Ingress 资源中指定的定制组件。
入口域
缺省 Ingress 域用于为集群中的每个应用程序构成唯一 URL,并且是集群中任何 ALB 的 IP 地址所引用的域。 创建集群时,将自动创建唯一的 Ingress 子域并将其注册为缺省域。 您可以将缺省域 更改为 集群中存在的任何域。
您也可以通过 IBM Cloud 的内部域名提供商或 IBM Cloud Internet Services 的外部提供商进行 创建或添加自己的域名 注册。
专用 ALB 不引用 IBM提供的 Ingress 子域,而是需要 定制域。
子域名的注册格式如下。
<cluster_name>.<globally_unique_account_HASH>-0000.<region>.containers.appdomain.cloud
下表描述了子域名的各个部分。
子域组件 | 描述 |
---|---|
* |
缺省情况下,将为集群注册子域的通配符。 |
<cluster_name> |
集群的名称。 -如果集群名称不超过 26 个字符,并且集群名称在此区域中是唯一的,那么将包括并且不会修改整个集群名称: myclustername 。-如果集群名称不超过 26 个字符,并且此区域中存在同名的现有集群,那么将包括整个集群名称,并添加一个包含 6 个随机字符的短划线: myclustername-ABC123 。-如果集群名称是 26 个字符或更大的字符,并且集群名称在此区域中是唯一的,那么将仅使用集群名称的前 24 个字符: myveryverylongclusternam 。-如果集群名称是 26 个字符或更大的字符,并且此区域中存在同名的现有集群,那么将仅使用集群名称的前 17 个字符,并添加包含 6 个随机字符的短划线: myveryverylongclu-ABC123 。 |
<globally_unique_account_HASH> |
为 IBM Cloud 帐户创建全局唯一的 HASH。 为帐户的集群中 NLB 创建的所有子域都会使用此全局唯一的 HASH。 |
0000 |
充当集群中创建的每个子域的计数器。 |
<region> |
在其中创建集群的区域。 |
containers.appdomain.cloud |
IBM Cloud Kubernetes Service 子域的子域。 |
为了形成每个应用程序的唯一 URL,会将应用程序服务的路径附加到公共路径。 例如,请参阅以下应用程序 URL。
mycluster-a1b2cdef345678g9hi012j3kl4567890-0000.us-south.containers.appdomain.cloud/myapp1
入口类
Ingress 类确定所使用的 Ingress 控制器的类型。 IBM 提供了两个 Ingress 类,一个公共 (public-iks-k8s-nginx
) 和一个专用 (private-iks-k8s-nginx
)。这两个类都实现了 NGINX Ingress 控制器。 创建 Ingress 资源时,您指定的 Ingress 类将确定应用程序是公开还是私下公开。
您可以通过创建自己的 IngressClass
资源来使用定制 Ingress 类。
应用程序负载均衡器 (ALB)
ALB 侦听入局 HTTP,HTTPS或 TCP 服务请求,然后根据您在 Ingress 资源中定义的规则将这些请求转发到相应的应用程序 pod。 使用经典或 VPC 基础结构创建标准集群时,将在每个专区中自动为您创建一个公共 ALB 和一个专用 ALB。
经典集群中的 ALB
创建经典集群时,将在每个专区中自动为您创建一个公共 ALB 和一个专用 ALB。 将为经典集群中的公共和专用 ALB 分配一个静态 IP 地址,此地址在集群的生命周期内不会更改。
公共 ALB 共享在供应集群时为您注册的同一 IBM提供的 Ingress 子域,并且每个公共 ALB 的单个 IP 地址都链接到此子域。 要查找公共 ALB 的 IP 地址,请运行 ibmcloud ks ingress alb ls
并检查输出中的 ALB IP 字段。
经典集群中的专用 ALB 不使用 IBM提供的 Ingress 子域,并且不会自动启用。 必须首先在 CLI 中启用专用 ALB,然后在 Ingress 资源中指定 private-iks-k8s-nginx
类。 启用专用 ALB 后,您可以通过运行 ibmcloud ks ingress alb ls
并检查输出中的 ALB IP 字段来查找专用 IP 地址。
如果重新调度公共或专用 ALB pod,那么它将保留相同的 IP 地址。 但是,除去具有 ALB 的区域,或者除去该区域中 VLAN 上的所有工作程序,将除去该 ALB 的 IP 地址。
VPC 中的 ALB
创建 VPC 集群时,将在每个专区中自动为您创建一个公共 ALB 和一个专用 ALB。 此外,还会在 VPC 中的集群外部自动创建一个公共 VPC 负载均衡器。 在 VPC 集群中启用专用 ALB 时,还会创建专用 VPC 负载均衡器。
VPC 集群中 ALB 的 IP 地址不是静态的,可能会随时间变化,因此 VPC 负载均衡器会将 ALB 的公共或专用 IP 地址放在静态主机名后面。 将对公共或专用 ALB 应用单独的主机名。 请注意,ALB 主机名与集群的 Ingress 子域不同。
要在 VPC 集群中查找 ALB 的主机名,请运行 ibmcloud ks ingress alb ls
。 仅当启用了专用 ALB 时,才会列出专用主机名。
ALB 的工作程序节点需求
集群中每个专区至少需要两个工作程序节点,ALB 才能发挥高可用性功能并接收定期更新。 ALB pod 上的反亲缘关系规则确保仅将一个 pod 调度到每个工作程序节点。 当自动更新应用于ALB吊舱时,吊舱将被重新加载。 如果您只有一个工作程序节点,因此只有一个 ALB pod,那么 pod 不会自动更新以避免流量中断,仅当您手动删除 pod 并重新调度新 pod 时,才会应用更新。 每个专区至少有两个工作程序节点可避免此情况。
请注意,如果某个区域出现故障,则向该区域中的入口负载均衡器(Ingress ALB)发出的请求可能会出现间歇性故障。
缺省 TLS 证书
创建集群时,将创建可与 IBM提供的 Ingress 子域配合使用的缺省 TLS 证书。 您可以在 Ingress 资源中指定缺省 TLS 证书或提供的定制证书。
请考虑使用 Secrets Manager 来集中管理并自动更新 Ingress 子域证书和其他私钥。
使用 TLS 证书设置 Ingress 涉及创建或导入私钥。 如果要使用 IBM Cloud Ingress API 来完成这些步骤,那么必须具有缺省 Secrets Manager 实例。 否则,可以使用 kubectl
命令来复制证书。
Ingress 入门
准备好在集群中使用 Ingress 时,创建 Ingress 资源 以配置 Ingress 组件,定义路由请求的规则,并指定应用程序服务的路径。 包含要公开的应用程序或服务的每个名称空间都需要单独的 Ingress 资源。