对外暴露服务的方式

ClusterIP

ClusterIP,顾名思义,集群IP。它的作用就是为了能够让其所属Pod能够负载均衡且需要有一个虚拟IP(VIP)提供给IPtables。由于VIP没有挂接到网络设备,所以不能直接访问

ClusterIP Service的默认类型,如果没有指定Servicetype,默认就是ClusterIP

  • 功能:默认服务类型,通过集群内部虚拟 IP 暴露服务,仅限集群内访问。
  • 特点
    • 内部服务发现与负载均衡13
    • 不直接对外暴露,适合微服务间内部通信。
  • 适用场景:集群内部组件交互(如数据库、缓存服务)。

apiVersion: v1
kind: Service
metadata:
  name: my-internal-service
spec:
  type: ClusterIP
  selector:
    app: mynginx
  ports:
    - name: http
      protocol: TCP
      port: 80

NodePort

 NodePort会在所有节点(图示中的VM)上开放一个特定端口(图示中的30007),任何发送到该端口的流量都被转发到对应服务(图示中的Service)。
 

  • 用途: 允许外部流量访问服务。
  • 特点:
    • 在每个节点上打开一个特定的端口(介于 30000-32767之间),将流量转发到服务。
    • 可通过 <NodeIP>:<NodePort> 的形式访问服务。
  • 使用场景: 简单且快速地暴露服务,适用于开发和调试阶段。

apiVersion: v1
kind: Service
metadata:
  name: my-nodeport-service 
spec:
  type: NodePort
  selector:
    app: MyApp
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 80
      ## 当type为NodePort时,如果不指定nodePort的值,系统将选择一个随机端口。大多数时候应该让k8s来选择端口,用户自己来选择可用端口代价太大
      nodePort: 30007

LoadBalancer

在云环境(例如Azure)中,该服务类型会自动创建一个外部负载均衡器。

负载均衡器会分配一个外部IP,并将流量分发到服务后端的不同实例。

  • 功能:通过云平台(如 Azure)自动创建外部负载均衡器,分配公网 IP 并暴露服务。
  • 特点
    • 自动提供稳定的外部访问入口。
    • 每个服务需独立负载均衡器,可能增加云资源成本。
  • 适用场景:生产环境需高可用且依赖云平台支持的服务。

​ 

Ingress

 Ingress其实并不是一种服务类型,也就是说它并不是服务(Service),也和ServiceType属性无关。但它可以充当集群的入口点,它可以将路由规则整合到一个资源中,并扮演“智能路由”的角色。
 

  • 用途: 是一种更高级的流量管理方式,使得可以通过单个IP和域名来访问多个服务。
  • 特点:
    • 使用 Ingress 控制器来管理和配置 HTTP 和 HTTPS 流量。
    • 提供了基于路径和域的路由功能,可以配置SSL等。
    • 带来更灵活的协议支持和认证功能。
  • 使用场景: 适用于需要复杂路由规则和统一入口点的场合,比如多域、路径路由等。

 

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: sh-presales-ingress
  namespace: sh-genai
spec:
  ingressClassName: nginx
  rules:
    - http:
        paths:
          - path: /aigc-copilot
            pathType: Prefix
            backend:
              service:
                name: aigc-copilot-fe-service
                port:
                  number: 80

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐