gpt4 book ai didi

kubernetes - configmap 端口转发在 kubernetes 多容器 pod 中不起作用

转载 作者:行者123 更新时间:2023-12-02 12:31:30 24 4
gpt4 key购买 nike

下面是包含多个容器的 pod 的 configMap 文件。
端口号 80 暴露给外部世界,然后它将重定向到在 pod 中运行的另一个容器的端口 5000。

apiVersion: v1
kind: ConfigMap
metadata:
name: mc3-nginx-conf
data:
nginx.conf: |-
user nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

sendfile on;
keepalive_timeout 65;

upstream webapp {
server 127.0.0.1:5000;
}

server {
listen 80;

location / {
proxy_pass http://webapp;
proxy_redirect off;
}
}
}


$kubectl apply -f confimap.yaml

pods 配置:
apiVersion: v1
kind: Pod
metadata:
name: mc3
labels:
app: mc3
spec:
containers:
- name: webapp
image: training/webapp
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
volumeMounts:
- name: nginx-proxy-config
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
volumes:
- name: nginx-proxy-config
configMap:
name: mc3-nginx-conf

步骤 3. 使用 NodePort 服务公开 Pod:
$ kubectl expose pod mc3 --type=NodePort --port=80
service "mc3" exposed

步骤 4. 识别转发到 Pod 的节点上的端口:
$ kubectl describe service mc3

Name: mc3
Namespace: default
Labels: app=mc3
Annotations: <none>
Selector: app=mc3
Type: NodePort
IP: 100.68.152.108
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 32636/TCP
Endpoints: 100.96.2.3:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>

但我无法执行 curl
$ curl 100.96.2.3:80

$ curl http://100.96.2.3:80

$ curl http://100.96.2.3:32636

所以,我想知道为什么这个重定向不起作用。

来源: https://www.mirantis.co.jp/blog/multi-container-pods-and-container-communication-in-kubernetes/

它写在我们可以使用 url 访问的页面上

http://myhost :

现在,这里的 myhost 是什么?
而且,我知道暴露的端口是 32636

但是,我无法从浏览器或 curl/wget 命令访问。

最佳答案

据我所知,您无法通过 NodePort 与您的应用程序连接。 .

在您发布的评论中:I am executing on google cloud shell ,所以我假设你在 GKE 上运行。

你还在评论中发帖:

XXXXX@cloudshell:~ (pubsub-quickstart-XXXXX)$ curl -v 10.59.242.245:31357 * Rebuilt URL to: 10.59.242.245:31357 * Trying 10.59.242.245... * TCP_NODELAY set * connect to 10.59.242.245 port 31357 failed: Connection timed out * Failed to connect to 10.59.242.245 port 31357: Connection timed out * Closing connection 0 curl: (7)`

所以我看到你正在尝试 curl来自 cloudshell 的集群节点的私有(private) IP 地址
那是行不通的。

无法通过 cloudshell 中的私有(private)地址连接到节点
因为这些实例位于不同的网络中(彼此分离)。

要从外部网络连接到您的应用程序,您需要使用 EXTERNAL-IP可以找到运行 kubectl get no -owide 的节点的

第二件事(非常重要)是创建防火墙规则以允许进入该端口的流量,例如使用 gcloud cli:
gcloud compute firewall-rules create test-node-port --allow tcp:[NODE_PORT]

有关在 GKE 上公开应用程序的更多信息,请参阅 GKE documentation here .

让我知道这是否有帮助。

关于kubernetes - configmap 端口转发在 kubernetes 多容器 pod 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58409854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com