我有一个名为MyServices的kubernetes服务,它支持四个部署。每个部署都作为单个pod运行,每个pod都有自己的端口号。
如前所述,所有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
答案 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;一般的想法。
和&#34; Service Discovery for NGINX Plus with etcd&#34;对于实现(使用NGiNX plus,因此可以是非自由的) 或者&#34; Setting up Nginx Ingress on Kubernetes&#34;为了更加手动的方法。