发现Kubernetes Pod而不指定端口号

时间:2018-05-07 02:56:05

标签: kubernetes

我有一个名为MyServices的kubernetes服务,它支持四个部署。每个部署都作为单个pod运行,每个pod都有自己的端口号。

enter image description here

如前所述,所有pod都在一个kubernetes服务中运行。

我可以通过该kubernetes服务和端口号的外部IP地址来调用服务。

示例:92.18.1.1:3011/MicroserviceA 92.18.1.1:3012/MicroserviceB

我现在正在尝试开发和调用这些服务并从中获取响应的编排层。但是,我试图找出一种方法,我不需要指定每个微服务端口号,而是我可以通过其端点/ ServiceName调用它们。示例: 192.168.1.1/MicroserviceA

我如何达到上述声明?

从架构的角度来看,将所有微服务部署在单个kubenetes服务中(如我当前的方法)或每个微服务都需要它自己的服务是个好主意

下面是kubernetes部署文件(我删除了微服务C和D的脚本,因为它们与A和B相同):

apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  selector:
    app: microservice
  ports:
    - name: microserviceA
      protocol: TCP
      port: 3011
      targetPort: 3011
    - name: microserviceB
      protocol: TCP
      port: 3012
      targetPort: 3012
    - name: microserviceC
      protocol: TCP
      port: 3013
      targetPort: 3013
    - name: microserviceD
      protocol: TCP
      port: 3014
      targetPort: 3014
  type: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: microserviceAdeployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: microservice
    spec:
      containers:
      - image: dockerhub.com/myimage:v1
        name: microservice
        ports:
        - containerPort: 3011
      imagePullSecrets:
      - name: regcred
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: microserviceBdeployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: microservice
    spec:
      containers:
      - image: dockerhub.com/myimage:v1
        name: microservice
        ports:
        - containerPort: 3012

1 个答案:

答案 0 :(得分:1)

discover all the port of Kubernetes services的方式。

因此,您可以考虑使用kubectl get svc,如" Source IP for Services with Type=NodePort"

NODEPORT=$(kubectl get -o jsonpath="{.spec.ports[0].nodePort}" services <yourService>)
  

,我试图找出一种方法,我不需要指定每个微服务端口号,而是可以通过其端点/ ServiceName调用它们

然后,您需要通过一个入口点公开这些服务,通常是像NGiNX这样的反向代理 我们的想法是使用默认端口(80或443)公开所述服务,并将它们反向代理到实际的URL和端口号。

检查&#34; Service Discovery in a Microservices Architecture&#34;一般的想法。

https://cdn-1.wp.nginx.com/wp-content/uploads/2016/04/Richardson-microservices-part4-1_difficult-service-discovery.png

和&#34; Service Discovery for NGINX Plus with etcd&#34;对于实现(使用NGiNX plus,因此可以是非自由的) 或者&#34; Setting up Nginx Ingress on Kubernetes&#34;为了更加手动的方法。