Kubernetes Pod 无法使用服务与另一个 Pod 通信

Kubernetes Pod unable to communicate with another Pod using a Service

我有 2 个 Pods,每个有 1 个容器。容器名称是:

  1. mc1
  2. mc2

mc1 容器托管一个 asp.net 核心剃须刀页面应用程序,而 mc2 托管一个网络 api 应用程序。现在 mc1 必须与 mc2 通信,即 razor 页面应用必须调用 web api app.

我试着用下图来解释它:

我为这 2 个 pods 创建了 2 个部署:

name: dep1
labels:
    app: mc-app1
spec:
  replicas: 1
  selector: 
    matchLabels:
      app: mc-app1
  template:
    metadata: 
      labels:
        app: mc-app1
    spec:
      containers:
        - name: mc1
          image: multiapp
          imagePullPolicy: Never
          ports:
            - containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dep2
  labels:
    app: mc-app2
spec:
  replicas: 1
  selector: 
    matchLabels:
      app: mc-app2
  template:
    metadata: 
      labels:
        app: mc-app2
    spec:
      containers:
        - name: mc2
          image: multiapi
          imagePullPolicy: Never
          ports:
            - containerPort: 80

我还为包含 mc2 容器的 POD 创建了一个服务(即 web api 应用程序)。

apiVersion: v1
kind: Service
metadata:
  name: multi-container-service-2
spec:
  type: NodePort
  selector:
    app: mc-app2
  ports:
    - port: 8080
      targetPort: 80

部署和服务已成功应用于 k8s 集群。

接下来,我进入容器“mc1”并尝试卷曲名为 multi-container-service-2 的服务,但这不起作用。

我遇到错误:

curl: (7) Failed to connect to multi-container-service-2 port 80: Connection refused

在下图中,我使用以下命令进入容器 mc1 的 shell:

kubectl exec -it dep1-5c78b8c889-tjzzr -c mc1 -- /bin/bash

在下一张图片中,我正在执行出现错误的卷曲:

请注意,我已经使用下面给出的 2 个命令安装了 curl:

apt-get update
apt-get install curl

为什么无法使用服务调用mc2容器中的应用程序?我的操作系统是 windows 10.

我正在借助这两个教程:

  1. Build ASP.NET Core applications deployed as Linux containers into an AKS/Kubernetes orchestrator
  2. Communicate Between Containers in the Same Pod Using a Shared Volume

official kubernetes documentation:

中所述

Kubernetes creates DNS records for services and pods. You can contact services with consistent DNS names instead of IP addresses.

为了通过集群中的服务进行 Pod 到 Pod 通信,您必须使用以下语法:

{service_name}.{namespace}.svc.cluster.local

所以在你的情况下,卷曲将是:

curl multi-container-service-2.default.svc.cluster.local

您已将服务端口设置为 8080,但您在端口 80(即容器的端口)上调用该服务。

这应该有效:

curl http://multi-container-service-2:8080