13.4 高階屬性

掌握了 Kubernetes 的核心概念 (Pod,Service,Deployment) 後,我們需要瞭解更多高階屬性以建立生產級應用。

13.4.1 Helm - 套件管理工具

Helm 被稱為 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 作為新一代流量管理標準。原 kubernetes/ingress-nginx 專案已於 2026 年 3 月退役停止維護,不再接收安全更新。

Gateway API 基於 CRD 實現,提供了比 Ingress 更強大和標準化的流量管理能力:

  • GatewayClass:定義閘道器實現(類似 IngressClass)。
  • Gateway:定義監聽連接埠和協定(由基礎設施團隊管理)。
  • HTTPRoute:定義 HTTP 路由規則(由應用團隊管理)。
  • 職責分離:基礎設施、叢集運維和應用開發者各管各的資源。
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。
  • VolumeAttributesClass:Kubernetes 1.34 起 GA,用於在 CSI 驅動支援 ModifyVolume 時動態調整卷屬性,例如效能等級或服務質量引數。

13.4.4 Horizontal Pod Autoscaling

HPA 根據 CPU 利用率或其他指標 (如記憶體、自定義指標) 自動擴縮 Deployment 或 ReplicaSet 中的 Pod 數量。

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、證書)。Secret 值預設只是 Base64 編碼並存入 etcd;生產環境應顯式啟用 etcd 靜態加密或 KMS。

透過將設定與映象分離,保證了容器的可移植性。

13.4.6 Pod Security Standards

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

Kubernetes 使用 Pod Security Standards 定義三個安全級別,透過內建的 Pod Security Admission 控制器在命名空間級別執行:

  • Privileged:不受限制,適用於系統級和基礎設施工作負載。
  • Baseline:防止已知的許可權提升,適用於大多數工作負載。
  • Restricted:嚴格限制,遵循 Pod 安全加固最佳實踐。
apiVersion: v1
kind: Namespace
metadata:
  name: my-app
  labels:
    pod-security.kubernetes.io/enforce: baseline
    pod-security.kubernetes.io/warn: restricted

13.4.7 Sidecar Containers

Kubernetes 1.33 起 Sidecar Containers 進入 GA。它們透過 initContainers 中帶 restartPolicy: Always 的容器表達,既保留 init container 的啟動順序,又會在主容器生命週期內持續執行。對於舊叢集或不需要啟動順序控制的場景,仍可使用普通多容器 Pod。

第 111 页,共 196 页
使用 mdPress 构建