Windows下用Kind和Docker在Kubernetes中访问HTTPS 443端口问题
问题排查与解决
核心原因
错误提示明确显示Pod内部的443端口未被监听,导致端口转发时连接被拒绝。而80端口正常,说明Nginx仅在80端口提供服务,443端口未配置或未启动。
排查步骤
1. 验证Pod内443端口监听状态
执行命令进入目标Pod:
kubectl exec -it bb5e0e3b270881ce659aa820d29dd47170e229abb90fb128e255467a8dba606a -- /bin/bash
在Pod内检查端口监听:
netstat -tulpn | grep 443 # 或用ss命令(部分镜像无netstat) ss -tulpn | grep 443
如果无输出,说明Nginx未监听443端口,直接进入解决环节。
2. 检查Nginx配置文件
查看Pod内Nginx的默认配置文件:
cat /etc/nginx/conf.d/default.conf # 或主配置文件 cat /etc/nginx/nginx.conf
确认是否存在listen 443 ssl;的配置段。如果没有,说明未启用HTTPS端口;如果有但端口未监听,查看Nginx启动日志排查配置错误:
kubectl logs bb5e0e3b270881ce659aa820d29dd47170e229abb90fb128e255467a8dba606a
3. 确认Service端口映射正确性
检查Service的targetPort是否指向Pod的443端口:
kubectl describe service nginx
查看Endpoints和Port字段,确保443端口的targetPort与Pod暴露的443端口一致。
解决方案(以官方Nginx镜像为例)
官方Nginx镜像默认仅监听80端口,需手动配置HTTPS:
1. 生成自签SSL证书(测试用)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=localhost"
2. 创建K8s资源存储配置与证书
(1)创建ConfigMap存储Nginx HTTPS配置
apiVersion: v1 kind: ConfigMap metadata: name: nginx-ssl-config data: default.conf: | server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } } server { listen 443 ssl; server_name localhost; ssl_certificate /etc/nginx/ssl/tls.crt; ssl_certificate_key /etc/nginx/ssl/tls.key; location / { root /usr/share/nginx/html; index index.html index.htm; } }
执行创建:
kubectl apply -f nginx-ssl-config.yaml
(2)创建Secret存储SSL证书
kubectl create secret tls nginx-ssl-secret --key tls.key --cert tls.crt
3. 更新Nginx Deployment
修改Deployment配置,挂载ConfigMap和Secret到Pod:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 - containerPort: 443 volumeMounts: - name: nginx-config mountPath: /etc/nginx/conf.d/default.conf subPath: default.conf - name: nginx-ssl mountPath: /etc/nginx/ssl readOnly: true volumes: - name: nginx-config configMap: name: nginx-ssl-config - name: nginx-ssl secret: secretName: nginx-ssl-secret
执行更新:
kubectl apply -f nginx-deployment.yaml
4. 重新测试端口转发
等待Pod重启完成后,执行:
kubectl port-forward service/nginx 8080:443
此时本地访问https://localhost:8080即可正常连接。
内容的提问来源于stack exchange,提问作者newbie
相关产品推荐
相关产品推荐

