如何在服务中的Pod之间进行通信?

Ale*_*int 1 kubernetes

假设我有一个包含两个Pod的服务。其中一个容器是HTTP服务器,另一个容器需要命中该容器上的REST端点。第二个Pod是否可以使用主机名来寻址第一个Pod?

ers*_*les 5

我假设当您说“服务”时,您并不是在指Service对象的Kubernetes词典,否则您在其中的两个Pod Service将是相同的,因此让我们从“服务”在Kubernetes领域的含义开始。

您将必须创建一个名为Service的附加Kubernetes对象,以获取HTTP服务器的主机名Pod。创建a时,Service您将定义一个.spec.selector指向HTTP服务的Pod上的一组标签的a。举例来说,假设标签为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
Run Code Online (Sandbox Code Playgroud)

现在,您Pod可以使用Service名称来向HTTP服务发出请求my-http-service

还值得一提的是,Kubernetes的最佳实践表明,出于各种原因(包括应用程序的高可用性),它们Pod都由诸如DeploymentReplicaSet之类的控制器进行管理。