我在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
有关此问题的任何帮助或指示都会有所帮助。
答案 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,那么在应用此解决方案时需要考虑这一点。