这篇博客的主要内容和要点可以包括:
-
Dubbo服务在Kubernetes中的访问问题:Dubbo服务注册到注册中心的主机信息为Pod内部IP和端口,外部无法访问。
-
解决方案:使用环境变量设置Dubbo服务注册和绑定的IP和端口信息, nodePort设置为与环境变量相同的端口,实现外部访问流量转发至Dubbo服务。
-
环境变量说明:
- DUBBO_IP_TO_REGISTRY:获取Pod节点IP,用于服务注册中心注册
- DUBBO_PORT_TO_REGISTRY:定义注册中心注册端口,如30001
- DUBBO_PORT_TO_BIND:定义服务对外提供服务的绑定端口,如30001
- 使用方法:
- 设置Dubbo服务Deployment中的环境变量
- Dubbo服务启动时使用环境变量中的信息注册至注册中心
- Dubbo服务监听DUBBO_PORT_TO_BIND端口
- Service对象nodePort设置为环境变量端口,实现外部流量转发
- 方案优点:
- 不依赖语言或框架,通用方案
- 简单易操作,设置环境变量和Service即可
- 高可靠性,环境变量不会因系统变化而变化
这里是对这三个环境变量的注释和使用方法说明:
# 获取Pod所在节点的IP,并赋值给DUBBO_IP_TO_REGISTRY变量
- name: DUBBO_IP_TO_REGISTRY
valueFrom:
fieldRef:
fieldPath: status.hostIP
# 手动设置DUBBO_PORT_TO_REGISTRY变量的值为30001,这个端口是服务在注册中心进行注册的端口
- name: DUBBO_PORT_TO_REGISTRY
value: "30001"
# 手动设置DUBBO_PORT_TO_BIND变量的值为30001,这个端口是服务实际对外提供服务的端口
- name: DUBBO_PORT_TO_BIND
value: "30001"