单个节点中两个POD之间的通信(minikube)

arc*_*hie 1 docker kubernetes devops minikube

我必须在minikube中的两个POD之间进行通信,这两个POD在两个不同的端口中暴露,但是在单个节点中.

例如:

  • POD A使用8080端口,这是登陆页面.
  • 从POD A我们通过使用8761端口的超链接访问POD B.

现在,在kubernetes中它动态分配一个端口,例如:POD A:30069和POD B:30070

这里的问题是:当从POD A(30069)访问POD B时,它不会自动映射Puber B(30070)的kubernetes端口.而是POD B尝试在8761端口打开.

如果我的描述令人困惑,请道歉.如果您无法解答我的问题,请随时重新检查.

谢谢你的帮助

Con*_*nst 6

我必须在minikube中的两个POD之间进行通信,这两个POD在两个不同的端口中暴露,但是在单个节点中.

基于您希望进行pod间通信并且pod位于同一节点上的事实,您可能有几种(相当可疑且易碎)的方法,例如hostname和nodePort暴露.为了更符合kubernetes方法和建议,我建议使用Service而不是直接从Pod级别公开端口.

您可以在官方文档中阅读有关服务的更多信息,以及服务使用的示例如下:

kind: Service
apiVersion: v1
metadata:
  name: my-pod-b-service
spec:
  selector:
    app: MyPodBApp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8761
Run Code Online (Sandbox Code Playgroud)

此规范将创建一个名为的新Service对象my-pod-b-service,该对象在具有app=MyPodBApp标签的任何Pod上定位TCP端口8761 .因为来自pod A的任何请求来自host:my-pod-b-service和port:80将由端口上的某个pod B提供服务8761(注意port和targetPort可以是相同的,这只是一个例子).

作为旁注,对于pod A你会有类似的东西:

kind: Service
apiVersion: v1
metadata:
  name: my-pod-a-service
spec:
  selector:
    app: MyPodAApp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
Run Code Online (Sandbox Code Playgroud)

由于您定位服务,您可以将相同的传入端口(80)映射到这两个服务,并且只要在pod上正确设置了pod选择器,kubernetes就会注意每个服务都会到达适当的pod.