本文介绍如何通过域名访问 Pod。
步骤一:开启有状态模式
在创建应用服务或者编辑应用服务的 填写基本信息 阶段,开启 有状态模式。
![1.png](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/4371540961/p698913.png)
开启后,Pod 名称会加上 -0
、-1
... 数字后缀。待应用服务发布成功后,可前往应用服务详情页查看 Pod 名称是否已加上 -0
、-1
... 数字后缀。
![2.png](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/4371540961/p698914.png)
步骤二:配置 Headless Service
在创建应用服务或者编辑应用服务的 访问配置 阶段,添加 Headless Service 名称。本例中输入 svc。Headless Service 名称即为 test0928jf-svc。
![3.png](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/4371540961/p698915.png)
步骤三:基于域名规则计算 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
![1](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/5237266361/p351366.png)
假设部署单元 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。
![1](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/9364266361/p351320.png)
通过 Ping 命令验证能否访问 Pod 域名:test0928jf-rz00a-0.test0928jf-svc-cell-rz00a、test0928jf-rz00a-1.test0928jf-svc-cell-rz00a。
![1](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/9364266361/p351314.png)
Pod 域名只能在集群内部访问,如果应用服务发布的部署单元属于不同的集群,则不同的部署单元之间通过 Pod 域名无法访问。
步骤四:添加环境变量 POD_ENDPOINTS = <Pod 域名>
在编辑应用服务的 Pod 模板配置 阶段,开启 覆盖配置 后,新建环境变量,将上面的域名列表写入环境变量,变量名支持自定义:
POD_ENDPOINTS= test0928jf-rz00a-0.test0928jf-svc-cell-rz00a,test0928jf-rz00a-1.test0928jf-svc-cell-rz00a
![4.png](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/4371540961/p698916.png)
待应用服务发布后,即可从环境变量中获取所有 Pod 的域名列表。环境变量名可以按需定义。