You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:35:17