pods 如何与使用 Kubernetes 创建的集群中的其他 pod 通信
How do pods communicates with the other pod in a cluster created using Kubernetes
我在 aws 中使用 kops 创建了 1 个主节点和 1 个工作节点以及 2 个 pods。
在一个 pod 中,我有我的 oracle 数据库 运行ning,在另一个 pod 中,我部署了我的 java Web 应用程序。现在 运行 java Web 应用程序需要与数据库 pod 对话
为了在集群中的 2 pods 之间进行通信,我在我的 java 应用程序中配置了 pod 的 IP 地址。我能够使用云提供商 public URL 访问应用程序,在开发环境中一切都很好。但是在生产环境中,我无法在我的 java 应用程序 Pod 中继续配置数据库 Pod 的 IP 地址。
人们如何解决这个问题?你们是否使用 Pod 的 IP 地址与 kubernetes 中的其他 Pod 通信?或者 pods 之间还有其他通信方式吗?
这是我的 Pods 在云中的样子
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
有关此问题的任何帮助或指示都会有所帮助。
要在两个 pods 之间进行通信,您应该使用端口类型为 ClusterPort
的 service
资源,因为它们在同一个集群中。
根据 kubectl get pods
的输出,您有两层:
应用层:csapp-8cd5d44556-7725f
数据层:csdb-739d459467-92cmh
下面是数据层的 service
资源示例,以及它在应用程序层中的使用方式。
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)
并且在 App 层的 POD 中,您应该为环境变量提供来自上述服务的值:
apiVersion: v1
kind: Pod
spec:
containers:
- name: xx
image: "xxx:v1"
ports:
- containerPort: 8080
protocol: TCP
env:
- name: "REDIS_URL"
value: "redis://$(EXAMPLE_DATA_TIER_SERVICE_HOST):$(EXAMPLE_DATA_TIER_SERVICE_PORT_REDIS)"
如果您的数据库不是 Redis,则在应用此解决方案时需要考虑到这一点。
我在 aws 中使用 kops 创建了 1 个主节点和 1 个工作节点以及 2 个 pods。 在一个 pod 中,我有我的 oracle 数据库 运行ning,在另一个 pod 中,我部署了我的 java Web 应用程序。现在 运行 java Web 应用程序需要与数据库 pod 对话 为了在集群中的 2 pods 之间进行通信,我在我的 java 应用程序中配置了 pod 的 IP 地址。我能够使用云提供商 public URL 访问应用程序,在开发环境中一切都很好。但是在生产环境中,我无法在我的 java 应用程序 Pod 中继续配置数据库 Pod 的 IP 地址。
人们如何解决这个问题?你们是否使用 Pod 的 IP 地址与 kubernetes 中的其他 Pod 通信?或者 pods 之间还有其他通信方式吗?
这是我的 Pods 在云中的样子
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
有关此问题的任何帮助或指示都会有所帮助。
要在两个 pods 之间进行通信,您应该使用端口类型为 ClusterPort
的 service
资源,因为它们在同一个集群中。
根据 kubectl get pods
的输出,您有两层:
应用层:
csapp-8cd5d44556-7725f
数据层:
csdb-739d459467-92cmh
下面是数据层的 service
资源示例,以及它在应用程序层中的使用方式。
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)
并且在 App 层的 POD 中,您应该为环境变量提供来自上述服务的值:
apiVersion: v1
kind: Pod
spec:
containers:
- name: xx
image: "xxx:v1"
ports:
- containerPort: 8080
protocol: TCP
env:
- name: "REDIS_URL"
value: "redis://$(EXAMPLE_DATA_TIER_SERVICE_HOST):$(EXAMPLE_DATA_TIER_SERVICE_PORT_REDIS)"
如果您的数据库不是 Redis,则在应用此解决方案时需要考虑到这一点。