pod如何与使用Kubernetes创建的集群中的其他pod进行通信

时间:2018-02-24 02:19:15

标签: amazon-web-services kubernetes cloud kops

我在aws中使用kops创建了1个主节点和1个工作节点,其中有2个pod。 在一个pod中我运行了oracle数据库,在其他pod中我已经部署了我的java web应用程序。现在运行java web应用程序需要与数据库pod进行通信  要在群集中的2个pod之间进行通信,我已在我的java应用程序中配置了pod的IP地址。我能够使用云提供商公共URL访问应用程序,在开发环境中一切都很好。但是在生产环境的情况下,我无法在我的java应用程序Pod中继续配置数据库Pod的IP地址。

人们如何解决这个问题?你们使用Pod的IP地址与kubernetes中的其他pod进行通信吗?或者是否有其他方式进行播放之间的通信?

以下是我的Pod在云中的样子

   NAME                           READY     STATUS    RESTARTS   AGE       IP            NODE
csapp-8cd5d44556-7725f         1/1       Running   2          1d        100.96.1.54   ip-172-56-35-213.us-west-2.compute.internal
csdb-739d459467-92cmh          1/1       Running   0          1h        100.96.1.57   ip-172-27-86-213.us-west-2.compute.internal

有关此问题的任何帮助或指示都会有所帮助。

1 个答案:

答案 0 :(得分:1)

要在两个pod之间进行通信,您应该使用端口类型为service的{​​{1}}资源,因为它们位于同一个群集中。

根据ClusterPort的输出,您有两个层次:

  • App Tier:kubectl get pods

  • 数据层:csapp-8cd5d44556-7725f

下面是数据层csdb-739d459467-92cmh资源的示例,然后是如何在App层内使用它。

service

在App层的 POD 中,您应该使用上述服务的值提供环境变量:

apiVersion: v1
kind: Service
metadata:
  name: example-data-tier
spec:
  selector:
    app: csdb # ⚠️Make sure of this, it should select the POD csdb-...
  ports:
    - name: redis
      protocol: TCP
      port: 6379
      # type (default is ClusterPort which is for internal)

如果您的数据库不是Redis,那么在应用此解决方案时需要考虑这一点。