ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
Pod 中的多个容器都可以通过`localhost`进行互相访问,因为它们使用相同的网络名称空间。下面的例子我们将展示容器间的网络通信。 我们在 Pod 中创建两个容器,一个 Nginx 容器作为反向代理,另一个 Webapp 容器运行一个简单的服务、当访问服务时会显示 “Hello world!”。 配置 Nginx 文件通过 HTTP 80 端口访问的请求会被转发到本地的 5000 端口上,在`/home/shiyanlou`目录下新建`nginx.conf`配置文件并向其中写入如下内容: ~~~yaml 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; } } } ~~~ 使用上面创建的 nginx.conf 配置文件创建一个名为 nginx-conf 的 ConfigMap: ~~~bash $ kubectl create configmap nginx-conf --from-file=/home/shiyanlou/nginx.conf configmap/nginx-conf created ~~~ 接下来我们创建 Pod YAML 文件,只开放 nginx 容器的 80 端口,webapp 容器的 5000 端口是没有开放的、所以不能被 Pod 外部访问,在`/home/shiyanlou`目录下新建`nginx-webapp.yaml`文件,并向其中写入如下内容: ~~~yaml apiVersion: v1 kind: Pod metadata: name: nginx-webapp-pod labels: app: http-service spec: containers: - name: webapp image: registry-vpc.cn-hangzhou.aliyuncs.com/chenshi-kubernetes/webapp:latest - 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: nginx-conf ~~~ 执行创建 Pod 资源对象: ~~~bash $ kubectl create -f nginx-webapp.yaml pod/nginx-webapp-pod created ~~~ 使用 NodePort 服务暴露 nginx-webapp-pod Pod: ~~~bash $ kubectl expose pod nginx-webapp-pod --type=NodePort --port=80 service/nginx-webapp-pod exposed ~~~ 查看 nginx-webapp-pod 所在的 Node 节点,并且查看 nginx-webapp-pod 服务开放的 NodePort: ~~~bash $ kubectl get pod nginx-webapp-pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-webapp-pod 2/2 Running 0 7m7s 10.244.2.4 kube-node-1 <none> <none> $ kubectl describe service nginx-webapp-pod ... NodePort: <unset> 30889/TCP ... ~~~ 最后可以使用 curl 或是浏览器直接访问 Node IP + NodePort 地址,可以看到成功显示了`Hello world!`,表示通过 NodePort 30889 访问到了 Nginx 容器的 80 端口,然后 Nginx 容器又将请求转发给了位于同一个 Pod 上的 webapp 容器的 5000 端口,最终成功请求到了服务。 ~~~bash $ curl 10.192.0.3:30889 Hello world! ~~~ ![](https://img.kancloud.cn/81/5f/815f62fad1d472ec87ac92b146ac24af_522x234.png) 我们这里展示的是只暴露一个端口,借助容器间的网络通信提供其他的服务;另外对于多容器 Pod 也可以创建多端口暴露服务,或是为每一个需要暴露的容器端口创建一个单一的服务。