美文网首页
k8s暴露dubbo服务外部访问

k8s暴露dubbo服务外部访问

作者: SparkOnly | 来源:发表于2021-03-16 21:24 被阅读0次

问题

由于dubbo服务启动的时候,获取的是本机的ip到注册中心进行注册,而k8s部署dubbo服务后,dubbo获取到的只是k8s内部的ip和端口,如果暴露出Service,ip和port是会变化的,从而导致外部访问不了k8s内部的dubbo服务

解决方案

IP可以通过获取宿主机的IP,或者直接指定宿主机的IP来进行指定
PORT可以通过环境变量直接设置
这样再通过NodePort暴露出服务的时候,就可以保持端口和环境变量的端口一致,使得外部可以直接访问dubbo服务

步骤:

  1. 配置文件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
  1. 启动服务并暴露服务
    ···
    kubectl apply -f order.yaml
    ···
  2. 查看服务状态
kubectl describe service order

可以看到当前服务的状态,此处我启动了两个节点,暴露了两个端口
(http: 9666->30002, dubbo: 30001->30001)


服务状态
  1. 验证服务
    访问http端口,响应正常
curl localhost:30002 

访问dubbo服务,响应正常


dubbo服务访问

相关文章

网友评论

      本文标题:k8s暴露dubbo服务外部访问

      本文链接:https://www.haomeiwen.com/subject/makjcltx.html