注册 NLB 的 DNS 子域
经典基础结构
本内容专门针对经典集群中的 NLB。 对于 VPC 集群,请参阅向 DNS 子域注册 VPC 负载均衡器主机名。
设置网络负载均衡器 (NLB) 后,可以通过创建子域来为 NLB IP 创建 DNS 条目。 您还可以设置 TCP/HTTP(S) 监视器,以对每个子域后面的 NLB IP 地址执行运行状况检查。
- 子域
- 在单专区或多专区集群中创建公共 NLB 时,可以通过为 NLB IP 地址创建子域,向因特网公开应用程序。 此外,IBM Cloud 还负责为子域生成和维护通配符 SSL 证书。 在多专区集群中,可以创建子域,并将每个专区中的 NLB IP 地址添加到该子域 DNS 条目。 例如,如果为美国南部 3 个专区中的应用程序部署了 NLB,那么可为这 3 个 NLB IP 地址创建子域
mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud
。 用户访问应用程序子域时,客户机会随机访问其中一个 IP,并且会向相应的 NLB 发送请求。
目前,您无法为私有 NLB 创建子域。
- 运行状况检查监视器
- 对单个子域后面的 NLB IP 地址启用运行状况检查,以确定这些地址是否可用。 对子域启用监视器后,监视器会对每个 NLB IP 执行运行状况检查,并根据这些运行状况检查使 DNS 查找结果保持更新。 例如,如果 NLB 具有 IP 地址
1.1.1.1
、2.2.2.2
和3.3.3.3
,那么子域的正常操作 DNS 查找将返回所有 3 个 IP,客户机会随机访问其中 1 个 IP 地址。 如果 IP 地址为3.3.3.3
的 NLB 由于任何原因(例如,由于专区故障)变为不可用,那么该 IP 的运行状况检查将失败,监视器会从子域中除去发生故障的 IP,并且 DNS 查找仅返回正常运行的1.1.1.1
和2.2.2.2
IP。
可以通过运行以下命令来查看为集群中的 NLB IP 注册的所有子域。
ibmcloud oc nlb-dns ls --cluster <cluster_name_or_id>
DNS 微服务更新是异步的,可能需要几分钟才能应用。 请注意,如果运行 ibmcloud oc nlb-dns
命令并接收到 200 确认消息,那么可能仍需要等待实现更改。 要检查子域的状态,请运行 ibmcloud oc nlb-dns ls
并在输出中找到 Status
列。
向 DNS 子域注册 NLB IP
通过为网络负载均衡器 (NLB) IP 地址创建子域,向公用因特网公开应用程序。
开始之前:
- 请查看以下限制。
- 您不能为私有 NLB 创建子域。
- 最多可以注册 128 个子域。 可以通过打开支持案例来解除对请求的这一限制。
- 在单专区集群中为应用程序创建 NLB 或在多专区集群的每个专区中创建 NLB。
要为一个或多个 NLB IP 地址创建一个子域,请执行以下操作:
-
获取 NLB 的 EXTERNAL-IP 地址。 如果在多专区集群的每个专区中都有公开一个应用程序的 NLB,请获取每个 NLB 的 IP。
oc get svc
在以下输出示例中,NLB EXTERNAL-IP 为
168.2.4.5
和88.2.4.5
。NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE lb-myapp-dal10 LoadBalancer 172.21.xxx.xxx 168.2.4.5 1883:30303/TCP 6d lb-myapp-dal12 LoadBalancer 172.21.xxx.xxx 88.2.4.5 1883:31303/TCP 6d
-
通过创建 DNS 子域来注册 IP。 要指定多个 IP 地址,请使用多个
--ip
选项。ibmcloud oc nlb-dns create classic --cluster <cluster_name_or_id> --ip <NLB_IP> --ip <NLB2_IP>
-
验证子域是否已创建。
ibmcloud oc nlb-dns ls --cluster <cluster_name_or_id>
示例输出
Hostname IP(s) Health Monitor SSL Cert Status SSL Cert Secret Name mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["168.2.4.5"] None created <certificate>
-
可选: 设置定制域以指向您在上一步中创建的 IBM提供的子域。
- 与域名服务 (DNS) 提供商合作,注册自定义域名。
- 使用 IBM Cloud DNS 注册自定义域名。
您也可以在负载平衡器配置中使用
service.kubernetes.io/ibm-load-balancer-cloud-provider-dns-name
注释注册自定义域。 -
通过将 IBM 提供的子域指定为规范名称记录 (CNAME),为自定义域定义别名。
-
在 Web 浏览器中,输入要用于通过创建的子域来访问应用程序的 URL。
接下来,可以通过创建运行状况监视器,启用对子域的运行状况检查。
了解子域格式
NLB 的子域格式为 <cluster_name>-<globally_unique_account_HASH>-0001.<region>.containers.appdomain.cloud
。
例如,为 NLB 创建的子域可能类似于 mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud
。 下表描述了子域的每个组成部分。
NLB 子域组件 | 描述 |
---|---|
* |
缺省情况下,将为集群注册子域的通配符。 |
<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。 |
0001 |
充当您创建的每个子域的计数器。 |
<region> |
在其中创建集群的区域。 |
containers.appdomain.cloud |
Red Hat OpenShift on IBM Cloud 子域的子域。 |
通过创建运行状况监视器,启用对子域的运行状况检查
对单个子域后面的 NLB IP 地址启用运行状况检查,以确定这些地址是否可用。
开始之前,请向 DNS 子域注册 NLB IP。
-
获取子域的名称。 在输出中,请注意,主机的监视 Status 为
Unconfigured
。ibmcloud oc nlb-dns monitor ls --cluster <cluster_name_or_id>
示例输出
Hostname Status Type Port Path mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud Unconfigured N/A 0 N/A
-
为子域创建运行状况检查监视器。 如果不包含配置参数,则使用默认值。
ibmcloud oc nlb-dns monitor configure --cluster <cluster_name_or_id> --nlb-host <host_name> --enable --description <description> --type <type> --method <method> --path <path> --timeout <timeout> --retries <retries> --interval <interval> --port <port> --header <header> --expected-body <expected-body> --expected-codes <expected-codes> --follows-redirects <true> --allows-insecure <true>
-c, --cluster <cluster_name_or_ID>
- 必需:向其注册子域的集群的名称或标识。
--nlb-host <host_name>
- 必需:要对其启用运行状况检查监视器的子域。
--enable
- 包含此选项可为子域启用新的健康检查监控器。
--description <description>
- [已弃用]健康监控器的描述。
--type <type>
- 用于健康检查的协议:
HTTP
,HTTPS
,或TCP
。 默认值:HTTP
。 --method <method>
- [已废弃]用于健康检查的方法。
type
HTTP
和HTTPS
的默认值:GET
。type
TCP
的默认值:connection_established
。 此标记已废弃,2025 年 7 月 18 日后将不起作用:所有健康监测仪都将使用 GET! --path <path>
- 当
type
为HTTPS
时:要进行健康检查的端点路径。 缺省值:/
--timeout <timeout>
- 超时(以秒为单位),在此时间后 IP 会被视为不可访问。 运行状况检查会等待
interval
参数中指定的秒数,然后重试访问该 IP。 数值必须是 1 - 60 范围内的整数。 缺省值:5
--retries <retries>
- [已弃用]当超时发生时,在无法连接的 IP 被视为不健康之前尝试重试的次数。 重试会立即尝试执行。 此值必须是 1-5 范围内的整数。 默认值:
2
。 --interval <interval>
- 各个运行状况检查之间的时间间隔(以秒为单位)。 较短的时间间隔可能会缩短故障转移时间,但会增加 IP 上的负载。 数值必须是 60 - 300 范围内的整数。 默认值:
60
。 --port <port>
- 进行运行状况检查时要连接到的端口号。 当
type
为TCP
时,需要使用该参数。 当type
为HTTP
或HTTPS
时,只有在 HTTP 使用 80 以外的端口或 HTTPS 使用 443 以外的端口时,才定义端口。 TCP 的默认值:0
。 HTTP 的默认值:80
。 HTTPS 的默认值:443
。 --header <header>
- [已弃用]
type
为HTTP
或HTTPS
时需要:HTTP 在健康检查中发送的请求标头,如 Host 标头。 User-Agent 头信息无法覆盖。 该选项仅对类型 " HTTP "或 " HTTPS "有效。 要在请求中添加多个标头,请多次指定该选项。 该选项接受以下格式的数值:--header Header-Name=value
。 更新监视器时,指定的头将替换现有头。 要删除所有现有标题,请在该选项中指定一个空值--header ""
。 此标记已过时,2025 年 7 月 18 日之后,只有 "Host "标头可以配置! --expected-body <expected-body>
- [已弃用]
type
为HTTP
或HTTPS
时:健康检查在响应正文中查找的不区分大小写的子字符串。 如果找不到此字符串,那么会认为该 IP 运行状况不佳。 --expected-codes <expected-codes>
- [已弃用]
type
为HTTP
或HTTPS
时:HTTP 健康检查在响应中查找的代码。 如果找不到 HTTP 代码,那么 IP 会被视为运行状况欠佳。 默认值:2xx
。 该标记已被弃用,2025 年 7 月 18 日后将不起作用:HTTP / HTTPS 类型监控器只有在端点响应 2xx 状态代码时,才会认为端点是健康的。 --allows-insecure <true>
- [已弃用]
type
为HTTP
或HTTPS
时:设为true
则不验证证书。 此标记已废弃,2025 年 7 月 18 日后将不起作用:健康监测器将不会验证证书! --follows-redirects <true>
- [已弃用]
type
为HTTP
或HTTPS
时:设置为true
,以跟踪 IP 返回的任何重定向。
示例命令
ibmcloud oc nlb-dns monitor configure --cluster mycluster --nlb-host mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud --enable --description "Login page monitor" --type HTTPS --method GET --path / --timeout 5 --retries 2 --interval 60 --header Host=example.com --header Origin=https://akamai.com --expected-body "healthy" --expected-codes 2xx --follows-redirects true
-
验证是否使用正确的设置配置了运行状况检查监视器。
ibmcloud oc nlb-dns monitor get --cluster <cluster_name_or_id> --nlb-host <host_name>
示例输出
Created On: 2019-04-24 09:01:59.781392 +0000 UTC Modified On: 2020-02-26 15:39:05.273217 +0000 UTC Type: https Description: Health check monitor for ingress public hostname Method: GET Path: /alive Expected Body: - Expected Codes: 2xx Follow Redirects: false Allow Insecure: true Port: 443 Timeout: 5 Retries: 2 Interval: 15 Headers: Origin: https://akamai.com Host: example.com Health Monitor Apply Properties Status: success
-
查看子域的运行状况检查状态。
ibmcloud oc nlb-dns monitor ls --cluster <cluster_name_or_id>
示例输出
Hostname Status Type Port Path mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud Healthy https 443 /alive
更新和除去子域中的 IP 以及用于子域的监视器
可以在已生成的子域中添加和除去 NLB IP 地址。 您还可以根据需要对子域禁用和启用运行状况检查监视器。
NLB IP
如果日后在集群的其他专区中添加了更多 NLB 来公开同一应用程序,那么可以将这些 NLB IP 添加到现有子域。
ibmcloud oc nlb-dns add --cluster <cluster_name_or_id> --ip <NLB_IP> --ip <NLB2_IP> ... --nlb-host <host_name>
还可以除去不再希望向子域注册的 NLB 的 IP 地址。 请注意,必须对要除去的每个 IP 地址运行以下命令。 如果从子域中除去所有 IP,该子域仍然会存在,但没有与之关联的 IP。
ibmcloud oc nlb-dns rm classic --cluster <cluster_name_or_id> --ip <ip> --nlb-host <host_name>
运行状况检查监视器
如果需要更改运行状况监视器配置,那么可以更改特定设置。 只包含要更改的设置选项。
ibmcloud oc nlb-dns monitor configure --cluster <cluster_name_or_id> --nlb-host <host_name> --description <description> --type <type> --method <method> --path <path> --timeout <timeout> --retries <retries> --interval <interval> --port <port> --header <header> --expected-body <expected-body> --expected-codes <expected-codes> --follows-redirects <true> --allows-insecure <true>
可以随时通过运行以下命令,对子域禁用运行状况检查监视器:
ibmcloud oc nlb-dns monitor disable --cluster <cluster_name_or_id> --nlb-host <host_name>
要对子域重新启用监视器,请运行以下命令:
ibmcloud oc nlb-dns monitor enable --cluster <cluster_name_or_id> --nlb-host <host_name>