下面是包含多个容器的Pod的configMap文件。 端口号80暴露于外部环境,然后将重定向到在容器中运行的另一个容器的端口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
吊舱配置:
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 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访问的页面上
现在,我的主人在哪里? 并且,我知道暴露的端口是32636
但是,我无法从浏览器访问或curl / wget命令。
答案 0 :(得分:0)
据我所知,您在通过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
到群集节点的私有IP地址
那是行不通的。
不可能通过cloudshell
上的私有地址连接到节点
因为这些实例位于不同的网络中(彼此分离)。
要从外部网络连接到您的应用程序,您需要使用EXTERNAL-IP
个节点,这些节点可以运行kubectl get no -owide
第二件事(非常重要)是创建防火墙规则,以允许进入该端口的流量,例如使用gcloud cli:
gcloud compute firewall-rules create test-node-port --allow tcp:[NODE_PORT]
有关在GKE上公开应用程序的更多信息,请参见GKE documentation here。
让我知道是否有帮助。