如何在 kubernetes 中的不同端口而不是端口 80 上配置 echo pod

Ram*_*nti 2 kubernetes

apiVersion: v1
    kind: Pod
    metadata:
       name: echo-pod
       namespace: echo
    spec:
       containers:
       - name: nginx
         image: nginx
         ports:
            -  containerPort: 81
Run Code Online (Sandbox Code Playgroud)

尝试通过运行上面的 yaml 文件来连接端口 81,但它仍在端口 80 上连接。使用 telnet 检查连接

echo -pod的ip是192.168.211.1

能够从 busybox pod(已存在)在端口 80 上连接 echo pod,但不能在端口 81 上连接。您可以观察到以下内容

root@ip-172-31-16-143:~# kubectl exec busybox -- telnet 192.168.211.1 80
Connected to 192.168.211.1

root@ip-172-31-16-143:~# kubectl exec busybox -- telnet 192.168.211.1 81
telnet: can't connect to remote host (192.168.211.1): Connection refused
command terminated with exit code 1
Run Code Online (Sandbox Code Playgroud)

Edu*_*llo 7

通过containerPort: 81在 pod 模板上进行定义,您仅更改公开的容器端口,但您的 Nginx 服务器仍将侦听端口 80(因为它是默认配置的)。

您需要更改 Nginxlisten配置以匹配新的公开端口

与大多数 docker 实现不同,Nginx 不支持使用环境变量进行此类配置(请参阅Docker Hub 页面上的在 Nginx 配置中使用环境变量)。

如果您希望调整 Nginx 默认配置,则需要使用nginx.conf该配置创建一个新配置,然后在 Dockerfile 中listen 81;使用替换原始配置来创建自定义镜像nginx。COPYFROM

如果您更喜欢仍然使用原始 Nginx 映像的“一行解决方法”,您可以更改命令/参数以替换每次启动时的监听配置:

  containers:
  - name: nginx
    image: nginx
    command: ["/bin/sh","-c"]
    args: ["sed -i 's/listen  .*/listen 81;/g' /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"]
    ports:
    - containerPort: 81
Run Code Online (Sandbox Code Playgroud)