k8s暴露dubbo服务外部访问
2021-03-16 本文已影响0人
SparkOnly
问题
由于dubbo服务启动的时候,获取的是本机的ip到注册中心进行注册,而k8s部署dubbo服务后,dubbo获取到的只是k8s内部的ip和端口,如果暴露出Service,ip和port是会变化的,从而导致外部访问不了k8s内部的dubbo服务
解决方案
IP可以通过获取宿主机的IP,或者直接指定宿主机的IP来进行指定
PORT可以通过环境变量直接设置
这样再通过NodePort暴露出服务的时候,就可以保持端口和环境变量的端口一致,使得外部可以直接访问dubbo服务
步骤:
- 配置文件order.yaml
cat << EOF > order.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: order
spec:
selector:
matchLabels:
run: dubbo
replicas: 2
template:
metadata:
labels:
run: dubbo
spec:
containers:
- name: order
image: [image path]/order:dev
env:
- name: DUBBO_IP_TO_REGISTRY
valueFrom:
fieldRef:
fieldPath: status.hostIP
#- name: DUBBO_IP_TO_REGISTRY
# value: 10.150.31.115
- name: DUBBO_PORT_TO_REGISTRY
value: "30001"
- name: DUBBO_PORT_TO_BIND
value: "30001"
ports:
- containerPort: 30001
- containerPort: 9666
---
apiVersion: v1
kind: Service
metadata:
name: order
spec:
type: NodePort
selector:
run: dubbo
ports:
- name: dubbo
protocol: TCP
port: 30001
targetPort: 30001
nodePort: 30001
- name: http
protocol: TCP
port: 9666
targetPort: 9666
nodePort: 30002
EOF
- 启动服务并暴露服务
···
kubectl apply -f order.yaml
··· - 查看服务状态
kubectl describe service order
可以看到当前服务的状态,此处我启动了两个节点,暴露了两个端口
(http: 9666->30002, dubbo: 30001->30001)

- 验证服务
访问http端口,响应正常
curl localhost:30002
访问dubbo服务,响应正常
