k8s Service 的 TYPE有几种?分别表示什么含义?
1 个回答
风中传来苦咸,是科学的甜美气息!宋文作Kubernetes `Service` 的 `TYPE` 主要有 **4** 种类型,每种类型的作用和访问方式不同: ## **1. ClusterIP(默认)** - **作用**:仅在 **集群内部** 访问,外部无法访问。 - **访问方式**: - 通过 **Pod** 内部 DNS 解析 (`<service-name>.<namespace>.svc.cluster.local`) - 通过 **ClusterIP** 访问 - **示例**: ```yaml apiVersion: v1 kind: Service metadata: name: my-service spec: type: ClusterIP selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080 ``` - **适用场景**:用于集群内部微服务间的通信,如数据库、Redis、消息队列等。 ## **2. NodePort** - **作用**:将 Service 绑定到 **每个节点** 的固定端口,外部可以通过 `NodeIP:NodePort` 访问。 - **访问方式**: - `http://<任意 Node IP>:<NodePort>` - **示例**: ```yaml apiVersion: v1 kind: Service metadata: name: my-service spec: type: NodePort selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080 nodePort: 30080 # 固定端口(可选),范围 30000-32767 ``` - **适用场景**: - 适用于 **开发/测试环境**,可以直接访问。 - 但 **生产环境不建议**,因为端口范围固定,可能会冲突。 ## **3. LoadBalancer** - **作用**: - 结合 **云平台**(如 AWS、GCP、Azure)提供的 **负载均衡**,自动分配外部 IP,外部流量可以直接访问。 - **本地 K8s 环境** 没有云负载均衡,需要使用 `metallb` 之类的方案。 - **访问方式**: - `http://<LoadBalancer External-IP>:<Port>` - **示例**: ```yaml apiVersion: v1 kind: Service metadata: name: my-service spec: type: LoadBalancer selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080 ``` - **适用场景**: - **生产环境**,特别是 **云平台** 部署,如 AWS、GCP、Azure。 ## **4. ExternalName** - **作用**: - 不是典型的 Service,而是将请求 **代理** 到 **外部 DNS 域名**(而不是 Kubernetes 内部的 Pod)。 - **访问方式**: - **服务解析为外部 DNS 地址**,然后客户端直接访问外部服务。 - **示例**: ```yaml apiVersion: v1 kind: Service metadata: name: my-service spec: type: ExternalName externalName: example.com ``` - **适用场景**: - **混合云** 或 **微服务架构**,K8s 内部需要访问外部的数据库、API(如 AWS RDS)。 ## **类型对比总结** | 类型 | 访问方式 | 适用场景 | |------|--------|--------| | **ClusterIP** (默认) | 只能 **内部访问** (`ClusterIP` 或 `DNS`) | **微服务内部通信**,如数据库、缓存等 | | **NodePort** | 通过 **NodeIP:NodePort** 访问 | 开发/测试环境,不推荐生产环境 | | **LoadBalancer** | 通过 **云平台分配的公网 IP** 访问 | 生产环境,适用于云 K8s 部署 | | **ExternalName** | 解析为 **外部 DNS**,直接访问 | 连接外部 API、数据库 | 你如果是 **本地 K8s 部署**(不是云环境),没有 `LoadBalancer`,可以: - **使用 Ingress** 代理外部访问 - **使用 MetalLB** 实现 LoadBalancer - **直接用 NodePort** 让外部访问发布于 2025-03-02 01:41 •IP属地 甘肃举报评论收藏
公众号进入网站体验更佳

