## 13.4 高级特性

掌握了 Kubernetes 的核心概念 (Pod，Service，Deployment) 后，我们需要了解更多高级特性以构建生产级应用。

### 13.4.1 Helm - 包管理工具

[Helm](https://helm.sh/) 被称为 Kubernetes 的包管理器 (类似于 Linux 的 apt/yum)。它将一组 Kubernetes 资源定义文件打包为一个 **Chart**。

*   **安装应用**：`helm install my-release bitnami/mysql`
*   **版本管理**：轻松回滚应用的发布版本。
*   **模板化**：支持复杂的应用部署逻辑配置。

### 13.4.2 Gateway API 与 Ingress

Service 虽然提供了负载均衡，但通常是 4 层 (TCP/UDP)。集群需要 7 层 (HTTP/HTTPS) 路由能力来充当网关。

#### Gateway API（推荐）

> **重要**：Kubernetes 社区推荐使用 [Gateway API](https://gateway-api.sigs.k8s.io/) 作为新一代流量管理标准。原 `kubernetes/ingress-nginx` 项目已于 2026 年 3 月退役停止维护，不再接收安全更新。

Gateway API 基于 CRD 实现，提供了比 Ingress 更强大和标准化的流量管理能力：

*   **GatewayClass**：定义网关实现（类似 IngressClass）。
*   **Gateway**：定义监听端口和协议（由基础设施团队管理）。
*   **HTTPRoute**：定义 HTTP 路由规则（由应用团队管理）。
*   **职责分离**：基础设施、集群运维和应用开发者各管各的资源。

```yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: my-route
spec:
  parentRefs:
  - name: my-gateway
  hostnames:
  - "api.example.com"
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /api
    backendRefs:
    - name: api-svc
      port: 80
```

常见的 Gateway API 实现有 Envoy Gateway、Istio、Cilium、Traefik、Kong 等。

#### Ingress（传统方案）

Ingress 资源仍可正常使用，但建议新项目直接采用 Gateway API。已有 Ingress 配置可按需逐步迁移。

*   **域名路由**：基于 Host 将请求转发不同服务。
*   **路径路由**：基于 Path 将请求转发。
*   **SSL/TLS**：集中管理证书。

### 13.4.3 Persistent Volume 与 StorageClass

容器内的文件是临时的。对于有状态应用 (如数据库)，需要持久化存储。

*   **PVC (Persistent Volume Claim)**：用户申请存储的声明。
*   **PV (Persistent Volume)**：实际的存储资源 (NFS，AWS EBS，Ceph 等)。
*   **StorageClass**：定义存储类，支持动态创建 PV。

### 13.4.4 Horizontal Pod Autoscaling

HPA 根据 CPU 利用率或其他指标 (如内存、自定义指标) 自动扩缩 Deployment 或 ReplicaSet 中的 Pod 数量。

```yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
```

### 13.4.5 ConfigMap 与 Secret

*   **ConfigMap**：存储非机密的配置数据 (配置文件、环境变量)。
*   **Secret**：存储机密数据 (密码、Token、证书)，在 Etcd 中加密存储。

通过将配置与镜像分离，保证了容器的可移植性。

### 13.4.6 Pod Security Standards

> **注意**：PodSecurityPolicy (PSP) 已在 Kubernetes 1.25 中完全移除。

Kubernetes 使用 **Pod Security Standards** 定义三个安全级别，通过内置的 Pod Security Admission 控制器在命名空间级别执行：

*   **Privileged**：不受限制，适用于系统级和基础设施工作负载。
*   **Baseline**：防止已知的权限提升，适用于大多数工作负载。
*   **Restricted**：严格限制，遵循 Pod 安全加固最佳实践。

```yaml
apiVersion: v1
kind: Namespace
metadata:
  name: my-app
  labels:
    pod-security.kubernetes.io/enforce: baseline
    pod-security.kubernetes.io/warn: restricted
```
