apiVersion: v1
kind: Pod
metadata:
name: echo-pod
namespace: echo
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 81
试图通过在yaml文件上运行来在端口81上进行连接,但仍在端口80上进行连接。 使用telnet检查连接
echo -pod的ip是192.168.211.1
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
答案 0 :(得分:3)
通过在Pod模板上定义containerPort: 81
,您只需更改exposed container port,但Nginx服务器仍将在端口80上监听(默认配置)。
您需要更改Nginx listen
配置以匹配新的公开端口。
与大多数Docker实现不同,Nginx不使用环境变量来支持此类配置(请参见其Docker Hub页面上的Using environment variables in Nginx configuration)。
如果您希望采用Nginx默认配置,则需要使用nginx.conf
配置创建新的listen 81;
,然后在Dockerfile中使用COPY
替换原始配置以创建自定义图片FROM
nginx。
如果您仍希望仍使用原始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
答案 1 :(得分:1)
使用Kubernetes服务(集群IP类型)将一个Pod连接到另一个Pod。
创建如下服务。
apiVersion: v1
kind: Service
metadata:
name: my-service
namespace: echo
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 81
targetPort: 80
在nginx容器中添加标签app: nginx
,以便服务将容器选择为后端。
apiVersion: v1
kind: Pod
metadata:
name: echo-pod
namespace: echo
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
然后,您可以使用服务的群集IP或更好的服务的DNS和端口81
从另一个Pod连接到Nginx Pod。
要检查群集IP,请运行kubectl get svc my-service -n echo
DNS将为my-service.echo.svc.cluster.local
然后,您可以使用clusterip:81
或my-service.echo.svc.cluster.local:81
从另一个Pod连接到Nginx Pod。