在kubernetes中的Pod之间进行通信

时间:2018-12-27 07:33:18

标签: kubernetes

我有这样的东西:

           POD-1
             |
 -------------------------
 ?|?        ?|?        ?|?
service-1 service-2 service-3

如何从Pod内部的服务器与服务后面Pod中的其他服务器通信?

4 个答案:

答案 0 :(得分:7)

您需要为要访问的窗格提供服务。您可以只使用容器相应服务的内部端点。

作为示例,我们假设有一个mysql吊舱和一个与之相对应的服务,类型为ClusterIP类型的mysql-svc,如下所示暴露了端口3306。

apiVersion: v1
kind: Service
metadata:
  name: mysql-svc
spec:
  ports:
  - name: db-port
    protocol: "TCP"
    port: 3306
    targetPort: 3306
  selector:
    app: mysql

还有一个单独的使用该mysql的python应用程序pod。您可以使用mysql://mysql-svc:3306/dbName的内部端点mysql-svc访问pod内的mysql服务器

如果您的Pod位于两个不同的命名空间(dev命名空间中的mysql和qa命名空间中的python app),则可以使用mysql-svc.dev.svc.cluster.local

答案 1 :(得分:0)

如果您还有其他带有Pod的服务,则可以使用群集内部DNS进行访问:

对于名称空间foo中的服务bar,URL为foo.bar.svc.cluster.local。最后一部分cluster.local可以根据部署集群的方式进行更改。 kops可让您为其指定不同的值。

在同一个命名空间中进行通信时,您甚至不需要bar,只需使用不同的协议(例如mongo / rabbit / postgrest等)进行http://foo/foo:port

答案 2 :(得分:0)

仅使用 svc-name.namespace-name

即可访问同一群集中其他命名空间上的Pod。

SVC名称:foo

命名空间名称:bar

例如:foo.bar

答案 3 :(得分:-1)

如果您想在群集内部进行内部通信而不暴露于Internet HTTP / HTTPS,我建议您部署一个带有nodeport的Nginx Pod,然后在此Nginx Pod中提供配置,以基于每个服务的路径路由您的请求。请参阅:https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#exposing-the-service

要从Internet访问,请参考https://kubernetes.io/docs/concepts/services-networking/ingress/

或者,您也可以按照https://kubernetes.io/docs/tasks/access-application-cluster/service-access-application-cluster/#creating-a-service-for-an-application-running-in-two-pods

中的说明,在不同的节点端口上运行每个服务