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

K8s应用NodePort公网访问故障排查及TLS通信配置求助

现有配置文件

Deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wc-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wc
  template:
    metadata:
      labels:
        app: wc
    spec:
      containers:
      - name: wc
        image: myrepo33/wc:latest
        ports:
        - containerPort: 4499

Service.yml

apiVersion: v1
kind: Service
metadata:
  name: wc-service
spec:
  selector:
    app: wc
  ports:
    - protocol: TCP
      port: 80
      targetPort: 4499
      nodePort: 30001
  type: NodePort

问题解决方案

一、Minikube NodePort公网无法访问修复

  1. 确认访问IP
    Minikube默认运行在虚拟环境中,不能直接用宿主机公网IP访问NodePort。先获取Minikube节点IP:
minikube ip

用这个IP加上30001端口访问。如果是云服务器上用--driver=none运行Minikube,则直接用宿主机公网IP访问。

  1. 检查网络与关联状态
  • 确认云安全组已开放30001端口TCP入站规则
  • 验证Service与Pod的关联:
kubectl get svc wc-service
kubectl describe svc wc-service

查看Endpoints字段是否包含Pod IP,为空则检查Deployment标签与Service selector是否一致(当前配置已匹配)。

  1. Pod连通性测试
    通过端口转发验证Pod本身可用性:
kubectl port-forward pod/$(kubectl get pods -l app=wc -o jsonpath='{.items[0].metadata.name}') 4499:4499

本地访问localhost:4499正常则说明Pod无问题,问题出在Service或网络路由。

二、应用TLS通信配置

推荐用Ingress实现TLS终止,更易管理证书与路由。

方案1:Ingress TLS终止(推荐)

  1. 启用Minikube Ingress插件
minikube addons enable ingress
  1. 创建TLS证书与Secret
    生成自签名证书(生产环境建议用权威CA证书):
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=wc.example.com/O=wc"

将证书存入K8s Secret:

kubectl create secret tls wc-tls --key tls.key --cert tls.crt
  1. 创建Ingress配置(ingress.yml)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: wc-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
  - hosts:
    - wc.example.com
    secretName: wc-tls
  rules:
  - host: wc.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: wc-service
            port:
              number: 80

应用配置:

kubectl apply -f ingress.yml
  1. 访问测试
    获取Ingress控制器IP:minikube ip,在本地hosts添加Minikube_IP wc.example.com映射,访问https://wc.example.com即可通过TLS访问应用。公网访问需将域名解析到Minikube节点公网IP。

方案2:容器内直接配置TLS

  1. 创建应用证书Secret
kubectl create secret generic wc-app-tls --from-file=server.crt=tls.crt --from-file=server.key=tls.key
  1. 修改Deployment挂载证书
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wc-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wc
  template:
    metadata:
      labels:
        app: wc
    spec:
      containers:
      - name: wc
        image: myrepo33/wc:latest
        ports:
        - containerPort: 443
        volumeMounts:
        - name: tls-secret
          mountPath: /app/tls  # 替换为应用证书存放路径
          readOnly: true
      volumes:
      - name: tls-secret
        secret:
          secretName: wc-app-tls
  1. 修改Service指向443端口
apiVersion: v1
kind: Service
metadata:
  name: wc-service
spec:
  selector:
    app: wc
  ports:
    - protocol: TCP
      port: 443
      targetPort: 443
      nodePort: 30001
  type: NodePort

重新应用配置后,访问https://Minikube_IP:30001即可通过TLS访问。

内容的提问来源于stack exchange,提问作者Patil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:25:59