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

如何在Kubernetes中仅对外暴露单个REST API接口?

单容器多API的内外访问控制方案

针对你的需求,我们可以通过Kubernetes的Service和Ingress组合实现,分两种场景给你具体操作步骤:

场景1:健康检查API与其他API共用同一端口

如果所有API都跑在容器的同一个端口(比如8080),只是路径不同(比如健康检查是/healthz,其他是/api/*),可以这么做:

步骤1:创建ClusterIP Service供集群内部访问所有API

这个Service仅在集群内可见,内部Pod可以通过它访问所有API路径:

apiVersion: v1
kind: Service
metadata:
  name: internal-api-svc
spec:
  type: ClusterIP
  selector:
    app: your-app # 这里要和你的Pod标签一致
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080 # 容器内的API端口

步骤2:创建Ingress对外暴露健康检查路径

通过Ingress只开放/healthz路径给外部,其他路径依然只能集群内部访问:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: health-check-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1 # 如果你用Nginx Ingress控制器
spec:
  rules:
    - http:
        paths:
          - path: /healthz
            pathType: Exact
            backend:
              service:
                name: internal-api-svc
                port:
                  number: 8080

注意:集群需要先部署好Ingress控制器(比如Nginx Ingress)才能生效。外部流量通过Ingress的域名或IP只能访问/healthz,其他路径会被拦截。


场景2:健康检查API使用独立端口

如果健康检查API单独用一个端口(比如8081),其他API用另一个端口(比如8080),操作更简单:

步骤1:创建ClusterIP Service暴露内部API端口

仅允许集群内部访问非健康检查的API:

apiVersion: v1
kind: Service
metadata:
  name: internal-api-svc
spec:
  type: ClusterIP
  selector:
    app: your-app
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080

步骤2:创建NodePort/LoadBalancer Service暴露健康检查端口

这个Service对外暴露健康检查API的端口:

apiVersion: v1
kind: Service
metadata:
  name: external-health-svc
spec:
  type: NodePort # 集群在云环境的话可以换成LoadBalancer
  selector:
    app: your-app
  ports:
    - protocol: TCP
      port: 8081
      targetPort: 8081
      nodePort: 30008 # 可选,自己指定端口,不填会自动分配

外部可以通过<节点IP>:30008(NodePort场景)或LoadBalancer分配的外部IP访问健康检查API,内部则通过internal-api-svc:8080访问其他API。


额外提示

  • 确保Pod的app标签和Service的selector完全匹配,否则Service找不到对应的Pod。
  • 如果你用Ingress,记得给Ingress配置域名或绑定集群的外部IP,不然外部无法访问。
  • 内部访问时,集群内的Pod可以直接用Service名称加端口访问(比如internal-api-svc:8080),Kubernetes的DNS会自动解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:05:21