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

如何将本地k3d Kubernetes集群中运行的应用暴露至本地机器?

问题描述

我在本地k3d Kubernetes集群部署了一个带Helm Chart的项目,所有部署操作都正常完成,但服务使用ClusterIP仅能集群内部访问,想在本地浏览器打开应用,需要通过NodePort或LoadBalancer实现外部访问,求具体操作步骤。

已完成的正常操作:

# 构建Docker镜像
# 导航至根目录 -> ./ProtoClusterTutorial
docker build . -t proto-cluster-tutorial:1.0.0

# 导航至根目录
docker build -f ./SmartBulbSimulatorApp/Dockerfile . -t smart-bulb-simulator:1.0.0

# 将Docker镜像推送至Docker Hub
docker tag proto-cluster-tutorial:1.0.0 hulkstance/proto-cluster-tutorial:1.0.0
docker push hulkstance/proto-cluster-tutorial:1.0.0

docker tag smart-bulb-simulator:1.0.0 hulkstance/smart-bulb-simulator:1.0.0
docker push hulkstance/smart-bulb-simulator:1.0.0

# 列出Docker镜像
docker images

# 创建k3d集群(修复集群不可达错误后执行)
k3d cluster create two-node-cluster --agents 2

# 切换集群上下文
kubectl config use-context k3d-two-node-cluster

# 部署应用
helm install proto-cluster-tutorial chart-tutorial
helm install simulator chart-tutorial --values .\simulator-values.yaml

# 验证运行状态
kubectl get pods
kubectl logs proto-cluster-tutorial-78b5db564c-jrz26

方案一:用NodePort暴露服务

NodePort会在集群所有节点上开放一个固定端口,将外部流量转发到目标服务。

操作步骤:

  1. 修改Helm配置文件
    找到对应服务的values.yaml(或simulator专用的simulator-values.yaml),把服务类型改成NodePort,可指定端口(不指定则从30000-32767范围随机分配):

    service:
      type: NodePort
      # 可选:指定固定NodePort,比如30080
      nodePort: 30080
    

    两个服务(proto-cluster-tutorial和simulator)需要分别修改对应配置文件。

  2. 重新部署应用

    helm upgrade proto-cluster-tutorial chart-tutorial -f ./values.yaml
    helm upgrade simulator chart-tutorial -f ./simulator-values.yaml
    
  3. 获取NodePort端口
    执行命令查看服务详情:

    kubectl get svc
    

    在输出的NODEPORT列找到对应端口,比如30080:80/TCP。

  4. 本地访问
    k3d默认会把NodePort映射到本地localhost,直接访问http://localhost:<NODEPORT>即可。


方案二:用LoadBalancer暴露服务(k3d专属)

k3d内置Traefik作为Ingress Controller,支持LoadBalancer类型服务,会自动把服务端口映射到本地主机。

操作步骤:

  1. 修改Helm配置文件
    把服务类型改成LoadBalancer:

    service:
      type: LoadBalancer
    
  2. 重新部署应用

    helm upgrade proto-cluster-tutorial chart-tutorial -f ./values.yaml
    helm upgrade simulator chart-tutorial -f ./simulator-values.yaml
    
  3. 获取外部访问地址
    执行命令查看服务:

    kubectl get svc
    

    输出的EXTERNAL-IP列会显示localhost,结合PORT(S)列的端口,直接访问http://localhost:<端口号>即可(如果端口是80,直接访问http://localhost)。

进阶:创建集群时提前映射端口

如果想提前固定本地映射端口,创建集群时可以指定:

k3d cluster create two-node-cluster --agents 2 -p "8080:80@loadbalancer" -p "8443:443@loadbalancer"

这样集群的80/443端口会映射到本地8080/8443,后续部署LoadBalancer服务时直接访问http://localhost:8080即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:20:44