kubernetes - 如何在服务中的 pod 之间进行通信?

标签 kubernetes

假设我有一个包含两个 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/

相关文章:

kubernetes - kubernetes 指标 "/metrics/resource/v1alpha1"和 "/metrics/cadvisor"端点之间的差异

kubernetes - kubernetes (minikube) 中的 Fabric v2.0 - 错误对等 channel 加入 - 由于 pod 名称导致的 TLS 问题

kubernetes - 如何在 prometheus stable Helm Charts values.yaml 文件中添加 sidecar 容器?

kubernetes - Kubernetes节点亲和性和状态集

kubernetes - 部署时可以通过环境变量向容器公开 Pod 信息吗?

kubernetes - k8s : getting error 1 Insufficient memory, 1 个节点上的 HashicorpVault 与 Pod 亲和性/反亲和性不匹配

具有观察事件权限的 Kubernetes 集群角色

docker - 如何通过 unix socket 在 Kubernetes 中运行 PHP?

amazon-web-services - 自动配置新的 Kubernetes 节点

mysql - 在 Kubernetes 作业中通过管道将文件传输到标准输入