Bootstrap

K8s介绍代理外部服务的svc几种方式

在 Kubernetes 中,若需让集群内应用访问外部服务,可通过以下 **Service 配置方式**实现代理:

---

### 1. **ClusterIP Service + 手动维护 Endpoints**
- **原理**:创建 `ClusterIP` 类型的 Service 并手动指定 `Endpoints`,将流量导向外部服务的 IP 和端口。
- **适用场景**:外部服务有固定 IP,且需通过 Service DNS 名称统一访问。
- **配置示例**:
  ```yaml
  # Service 定义
  apiVersion: v1
  kind: Service
  metadata:
    name: external-db
  spec:
    ports:
    - port: 3306
      targetPort: 3306
    type: ClusterIP

  # Endpoints 定义
  apiVersion: v1
  kind: Endpoints
  metadata:
    name: external-db
  subsets:
  - addresses:
    - ip: 192.168.1.100  # 外部服务 IP
    ports:
    - port: 3306
  ```
- **注意事项**:需手动维护 IP,变更时需更新 Endpoints。

---

### 2. **ExternalName Service**
- **原理**:通过 DNS CNAME 将 Service 名称映射到外部域名。
- **适用场景**:外部服务有固定域名,无需处理 IP 变化。
- **配置示例**:
  ```yaml
  apiVersion: v1
  kind: Service
  metadata:
    name: external-api
  spec:
    type: ExternalName
    externalName: api.external.com  # 外部服务域名
    ports:
    - port: 80
  ```
- **注意事项**:
  - 不支持端口映射(需与外部服务端口一致)。
  - TLS 证书需匹配目标域名。

---

### 3. **Headless Service + Endpoints**
- **原理**:创建无头 Service(`ClusterIP: None`)并配置 Endpoints,直接暴露外部服务的地址。
- **适用场景**:需绕过 ClusterIP 直接访问外部服务端点。
- **配置示例**:
  ```yaml
  # Headless Service
  apiVersion: v1
  kind: Service
  metadata:
    name: external-headless
  spec:
    clusterIP: None
    ports:
    - port: 5432

  # Endpoints 同上
  ```
- **注意事项**:适用于需要直接与服务实例通信的场景

;