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

如何从云外浏览器访问Kubernetes Pod内部署的index.html文件?

整体分为3个核心流程:打包包含静态HTML的镜像、部署Pod到集群、配置公网可访问的暴露规则,具体操作如下:

操作步骤

步骤1:构建包含index.html的容器镜像

在index.html所在的本地目录创建Dockerfile:

# 采用轻量的官方nginx镜像作为基础运行环境
FROM nginx:alpine
# 将本地index.html复制到nginx默认静态资源目录
COPY index.html /usr/share/nginx/html/

执行镜像构建、推送到集群可访问的镜像仓库(示例镜像仓库地址为registry.example.com,可替换为你自己的私有/共有镜像仓库地址):

# 构建镜像
docker build -t registry.example.com/static-html:v1 .
# 推送镜像
docker push registry.example.com/static-html:v1

测试场景下也可以将镜像手动导入所有K8s节点,生产环境必须使用集群可统一拉取的镜像仓库

步骤2:部署Deployment运行Pod

创建deployment.yaml配置文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: static-html-deploy
spec:
  replicas: 2
  selector:
    matchLabels:
      app: static-html
  template:
    metadata:
      labels:
        app: static-html
    spec:
      containers:
      - name: nginx
        image: registry.example.com/static-html:v1
        ports:
        - containerPort: 80

执行部署命令:

kubectl apply -f deployment.yaml

执行kubectl get pods确认Pod状态为Running,代表部署成功。

步骤3:配置公网访问规则

根据你的集群环境和需求,选择以下任意一种暴露方案即可:

方案1:LoadBalancer类型Service(公有云K8s集群首选)

公有云厂商的托管K8s服务默认支持LoadBalancer类型Service,会自动分配公网IP。
创建service-lb.yaml:

apiVersion: v1
kind: Service
metadata:
  name: static-html-svc
spec:
  type: LoadBalancer
  selector:
    app: static-html
  ports:
  - port: 80
    targetPort: 80

执行创建命令:

kubectl apply -f service-lb.yaml

等待3-5分钟后执行kubectl get svc static-html-svc,查看EXTERNAL-IP字段对应的公网IP,在浏览器直接访问该IP即可打开index.html。

方案2:NodePort类型Service(测试/无LoadBalancer场景使用)

NodePort会在所有K8s节点上开放一个固定端口用于外部访问,端口范围固定为30000-32767。
创建service-nodeport.yaml:

apiVersion: v1
kind: Service
metadata:
  name: static-html-svc
spec:
  type: NodePort
  selector:
    app: static-html
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080 # 可选,不填会自动分配30000-32767范围内的端口

执行创建命令:

kubectl apply -f service-nodeport.yaml

确保K8s节点的公网安全组/防火墙放通30080端口的入方向规则,在浏览器访问http://任意K8s节点公网IP:30080即可。

方案3:Ingress(多服务共享公网入口/需要域名访问场景使用)

如果集群已经部署了Ingress Controller(如nginx-ingress),可以用Ingress实现域名访问。
首先创建ClusterIP类型的Service:

apiVersion: v1
kind: Service
metadata:
  name: static-html-svc
spec:
  selector:
    app: static-html
  ports:
  - port: 80
    targetPort: 80

创建ingress.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: static-html-ingress
spec:
  ingressClassName: nginx
  rules:
  - host: www.yourdomain.com # 替换为你自己的域名,需要解析到Ingress Controller的公网IP
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: static-html-svc
            port:
              number: 80

执行创建命令:

kubectl apply -f ingress.yaml

域名解析生效后,直接访问域名即可打开页面。

常见问题排查

  • 访问超时:检查对应端口的安全组/防火墙是否放通,LoadBalancer类型需要放通80端口,NodePort类型需要放通对应的NodePort端口
  • 404错误:执行kubectl exec <Pod名称> -- cat /usr/share/nginx/html/index.html确认index.html文件是否正确打包到镜像中
  • 服务不通:执行kubectl describe svc static-html-svc检查Endpoints字段是否有对应的Pod IP,确认Service的Selector和Pod的Label匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:09:02