【发布时间】:2021-06-19 22:58:39
【问题描述】:
我有 2 个 Pod,每个都有 1 个容器。容器名称是:
- mc1
- mc2
mc1 容器托管一个 asp.net core razor pages 应用程序,而 mc2 托管一个 web api 应用程序。现在 mc1 必须与 mc2 通信,即剃须刀页面应用程序必须调用 web api 应用程序。
我为这 2 个 pod 创建了 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 容器(即 web api 应用程序)的 POD 创建了一个服务。
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) 无法连接到 multi-container-service-2 端口 80:连接被拒绝
在下图中,我使用以下命令进入容器 mc1 的外壳:
kubectl exec -it dep1-5c78b8c889-tjzzr -c mc1 -- /bin/bash
在下一张图片中,我正在做卷曲,但出现错误:
请注意,我已经使用下面给出的 2 个命令安装了 curl:
apt-get update
apt-get install curl
为什么不能使用服务调用mc2容器中的应用?我的操作系统是 windows 10。
我正在参考这两个教程:
【问题讨论】:
-
您好。您已经创建了一个 NodePort 服务。那是为了暴露在集群之外。考虑改用
ClusterIP。现在回到你的问题。查看端点kubectl get endpoint。然后,您可以描述为该服务创建的端点。基本上在创建服务时,会创建相应的 Endpoint。检查它是否在端点中列出了 pod IP。如果它在那里,请检查您的应用是否真的在监听 :80。可能不是。 -
另一件事 - 当你卷曲时,你实际上是在点击
service。该服务正在侦听 8080,而不是 80。因此您需要更改 curl。
标签: kubernetes kubernetes-pod kubernetes-service