本文介绍如何通过域名访问 Pod。
步骤一:开启有状态模式
在创建应用服务或者编辑应用服务的 填写基本信息 阶段,开启 有状态模式。
开启后,Pod 名称会加上 -0
、-1
... 数字后缀。待应用服务发布成功后,可前往应用服务详情页查看 Pod 名称是否已加上 -0
、-1
... 数字后缀。
步骤二:配置 Headless Service
在创建应用服务或者编辑应用服务的 访问配置 阶段,添加 Headless Service 名称。本例中输入 svc。Headless Service 名称即为 test0928jf-svc。
步骤三:基于域名规则计算 Pod 域名
域名规则如下:
Service 命名规则:<Headless Service 名称>-cell-<部署单元名>
示例:test0928jf-svc-cell-rz00a
Hostname 命名规则:<应用服务名>-<部署单元名>-<Pod number>
说明Pod Number:Cell 维度从 0 开始递增的数字。
应用服务发布完成后,可前往应用服务详情页查看 Pod 名称,Pod 名称最后一位即为 Pod Number。
示例:test0928jf-rz00a-0
Pod 域名规则:<hostname>.<service name>
示例:test0928jf-rz00a-0.test0928jf-svc-cell-rz00a
假设部署单元 rz00a 有 2 个副本,基于上述规则,计算结果如下:
计算项 | 计算结果 |
Service | test0928jf-svc-cell-rz00a |
Hostname | test0928jf-rz00a-0 test0928jf-rz00a-1 |
Pod 域名 | test0928jf-rz00a-0.test0928jf-svc-cell-rz00a test0928jf-rz00a-1.test0928jf-svc-cell-rz00a |
通过 Ping 命令验证能否访问 Service:test0928jf-svc-cell-rz00a。
通过 Ping 命令验证能否访问 Pod 域名:test0928jf-rz00a-0.test0928jf-svc-cell-rz00a、test0928jf-rz00a-1.test0928jf-svc-cell-rz00a。
Pod 域名只能在集群内部访问,如果应用服务发布的部署单元属于不同的集群,则不同的部署单元之间通过 Pod 域名无法访问。
步骤四:添加环境变量 POD_ENDPOINTS = <Pod 域名>
在编辑应用服务的 Pod 模板配置 阶段,开启 覆盖配置 后,新建环境变量,将上面的域名列表写入环境变量,变量名支持自定义:
POD_ENDPOINTS= test0928jf-rz00a-0.test0928jf-svc-cell-rz00a,test0928jf-rz00a-1.test0928jf-svc-cell-rz00a
待应用服务发布后,即可从环境变量中获取所有 Pod 的域名列表。环境变量名可以按需定义。