假设我有一个包含两个 pod 的服务。其中一个 pod 是 HTTP 服务器,另一个 pod 需要访问该 pod 上的 REST 端点。是否有第二个 pod 可以用来寻址第一个 pod 的主机名?
最佳答案
我假设当您说“服务”时,您不是指 Service
对象的 Kubernetes 词典,否则 Service
中的两个 Pod 将是相同,所以让我们首先梳理一下“服务”在 Kubernetes 领域中的含义。
您必须创建一个额外的 Kubernetes object called a Service
获取 HTTP 服务器的 Pod
的主机名。创建 Service
时,您将定义一个 .spec.selector
指向 HTTP 服务 Pod 上的一组标签。举个例子,假设标签是 app: nginx
。该 Service
对象的名称将成为内部 DNS 记录,可供第二个 Pod
查询。
一个简化的例子:
apiVersion: v1
kind: Pod
metadata:
name: http-service
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
name: my-http-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
现在您的第二个 Pod
可以通过 Service
名称 my-http-service
向 HTTP 服务发出请求。
值得一提的是,Kubernetes 最佳实践规定这些 Pod
由 Controller 管理,例如 Deployment s 或 ReplicaSet s 出于各种原因,包括应用程序的高可用性。
关于kubernetes - 如何在服务中的 pod 之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51011689/