首頁文章關於報價聯絡我們🌐 EN
返回首頁OpenShift
OpenShift 架構解析:Control Plane、Operator 與網路設計【2026】

OpenShift 架構解析:Control Plane、Operator 與網路設計【2026】

📑 目錄

OpenShift 架構解析:Control Plane、Operator 與網路設計【2026】OpenShift 架構解析:Control Plane、Operator 與網路設計【2026】

OpenShift 架構解析:Control Plane、Operator 與網路設計

想把 OpenShift 用好,先得搞懂它的架構。不然出了問題,連要看哪裡都不知道。

OpenShift 架構比原生 Kubernetes 多了不少東西,但核心邏輯其實不難理解。本文從高階架構圖開始,一層一層拆解,讓你建立完整的技術認知。如果你對 OpenShift 還不熟悉,建議先閱讀 OpenShift 完整指南



OpenShift 架構總覽

高階架構圖

OpenShift 架構可以分成四大層次:

┌─────────────────────────────────────────────────────────┐
│                    應用程式層                            │
│         Pods │ Deployments │ Services │ Routes          │
├─────────────────────────────────────────────────────────┤
│                  OpenShift 平台服務                      │
│   Console │ Monitoring │ Logging │ Registry │ Pipelines │
├─────────────────────────────────────────────────────────┤
│                    Kubernetes 層                         │
│        API Server │ Scheduler │ Controllers             │
├─────────────────────────────────────────────────────────┤
│                   作業系統層                             │
│              Red Hat CoreOS (RHCOS)                      │
├─────────────────────────────────────────────────────────┤
│                   基礎設施層                             │
│          雲端 │ 虛擬化 │ 裸機 │ 邊緣                    │
└─────────────────────────────────────────────────────────┘

與原生 Kubernetes 的差異

OpenShift 不只是「Kubernetes + 一些工具」,它在架構層面有幾個根本差異:

面向KubernetesOpenShift
作業系統任意 LinuxRHCOS(不可變)
安裝方式kubeadm 等多種統一安裝程式
元件管理手動或 HelmOperator 統一管理
預設安全較寬鬆SCC 嚴格限制
網路插件可選擇OVN-Kubernetes
升級機制手動協調Operator 自動化

設計理念

Red Hat 在 OpenShift 4.x 的設計有幾個核心理念:

1. 不可變基礎設施(Immutable Infrastructure)

節點的作業系統(RHCOS)是唯讀的,設定變更透過 Machine Config Operator 統一派送。好處是:

2. 一切皆 Operator

OpenShift 自身的所有元件都用 Operator 管理。Operator 是「會自我管理的應用程式」,知道如何安裝、升級、修復自己。

3. 預設安全

安全不是事後加上去的,而是內建在架構裡。預設啟用 SCC(Security Context Constraints)、網路隔離、映像檔掃描。



Control Plane 組件

Control Plane(控制平面)是叢集的大腦,負責接收請求、做決策、維護狀態。

API Server

API Server 是叢集的唯一入口。

所有操作——不管是 kubectl 指令、Web Console 點擊、還是 Operator 的請求——都必須經過 API Server。

kubectl ─────┐
Web Console ─┼───→ API Server ───→ etcd
Operator ────┘         │
                       ↓
              Controller Manager
                  Scheduler

API Server 的職責:

etcd

etcd 是叢集的記憶體。

所有叢集狀態都存在 etcd 裡:Pod 定義、Service 設定、ConfigMap、Secret⋯⋯全部。

etcd 特性:

etcd 的健康直接影響整個叢集。如果 etcd 掛了,叢集就無法接受任何變更。

Controller Manager

Controller Manager 負責「讓現實符合期望」。

你說「我要 3 個 Pod」,Controller Manager 就確保隨時都有 3 個 Pod 在跑。少了就補,多了就砍。

OpenShift 有多個 Controller:

Scheduler

Scheduler 決定 Pod 跑在哪個 Node。

當你建立一個 Pod,Scheduler 會:

  1. 過濾不符合條件的 Node(資源不足、標籤不符、污點排斥)
  2. 對剩下的 Node 評分
  3. 選分數最高的 Node

評分因素包括:

OAuth Server

OAuth Server 是 OpenShift 特有的元件,處理身份驗證。

Kubernetes 原生只有基本的認證機制,OpenShift 加入完整的 OAuth 2.0 實作:

# OAuth 設定範例
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
  - name: ldap
    type: LDAP
    ldap:
      url: "ldap://ldap.example.com/ou=users,dc=example,dc=com?uid"


Worker Node 架構

Worker Node 是實際跑應用程式的地方。

節點組成

每個 Worker Node 上跑著:

組件功能
Kubelet節點代理,管理 Pod 生命週期
CRI-O容器運行時,執行容器
OVN-Kubernetes網路插件,處理網路
Node Problem Detector偵測節點問題

CRI-O 容器運行時

OpenShift 使用 CRI-O 而非 Docker:

CRI-O 只做一件事:跑容器。不像 Docker 還包含映像檔建構、網路管理等功能。

Kubelet 配置

OpenShift 的 Kubelet 設定透過 Machine Config Operator 統一管理:

# KubeletConfig 範例
apiVersion: machineconfiguration.openshift.io/v1
kind: KubeletConfig
metadata:
  name: custom-kubelet
spec:
  machineConfigPoolSelector:
    matchLabels:
      pools.operator.machineconfiguration.openshift.io/worker: ""
  kubeletConfig:
    maxPods: 250
    podPidsLimit: 4096

節點擴展

OpenShift 透過 Machine API 管理節點:

# MachineSet 範例
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  name: worker-us-east-1a
spec:
  replicas: 3
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-machineset: worker-us-east-1a


Operator 機制深度解析

Operator 是 OpenShift 4.x 最重要的架構創新。

什麼是 Operator?

Operator 是一種設計模式:把應用程式的營運知識編碼成程式。

傳統做法:

  1. 人看文件學習怎麼裝
  2. 人手動執行安裝步驟
  3. 人處理升級、備份、故障

Operator 做法:

  1. Operator 知道怎麼裝(程式碼寫好了)
  2. Operator 自動執行安裝
  3. Operator 自動處理升級、備份、故障

Operator Lifecycle Manager(OLM)

OLM 是「管理 Operator 的 Operator」。

OLM 負責:

# Subscription 訂閱 Operator
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: elasticsearch-operator
  namespace: openshift-operators
spec:
  channel: stable
  name: elasticsearch-operator
  source: redhat-operators
  sourceNamespace: openshift-marketplace

OpenShift 內建 Operator

OpenShift 自身的元件全都是 Operator:

Operator管理對象
Cluster Version Operator叢集版本、升級
Machine Config Operator節點設定
Console OperatorWeb Console
Ingress OperatorRouter、Ingress
Monitoring OperatorPrometheus、Alertmanager
Logging Operator日誌收集

查看所有 ClusterOperator:

oc get clusteroperators

輸出範例:

NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED
authentication                             4.16.0    True        False         False
console                                    4.16.0    True        False         False
ingress                                    4.16.0    True        False         False
monitoring                                 4.16.0    True        False         False

自訂 Operator 開發

企業也能開發自己的 Operator。常見工具:

Operator 開發步驟:

  1. 定義 Custom Resource Definition(CRD)
  2. 實作 Controller 邏輯
  3. 打包成容器映像檔
  4. 發布到 OperatorHub


網路架構

OpenShift 網路是很多人覺得複雜的部分,但核心概念其實很清晰。

OVN-Kubernetes

OpenShift 4.x 預設使用 OVN-Kubernetes 網路插件:

OVN-Kubernetes 的優勢:

Pod 網路

每個 Pod 都有自己的 IP 位址,叢集內的 Pod 可以直接互通。

Pod A (10.128.0.5) ←──→ Pod B (10.128.1.10)
        │                      │
        └──────── OVN ─────────┘

Pod 網路設計:

Service 與 Ingress

Service 提供穩定的存取端點:

Service 類型說明
ClusterIP叢集內部 IP(預設)
NodePort在每個 Node 開 Port
LoadBalancer雲端負載平衡器

Route 是 OpenShift 特有的 Ingress 實作:

apiVersion: route.openshift.io/v1
kind: Route
metadata:
  name: my-app
spec:
  host: myapp.apps.cluster.example.com
  to:
    kind: Service
    name: my-app
  tls:
    termination: edge

Route 比 Kubernetes Ingress 更早出現,功能也更完整(如 TLS 重加密、藍綠部署權重)。

Network Policy

Network Policy 控制 Pod 之間的網路存取:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

預設情況下,所有 Pod 都可以互通。套用 Network Policy 後,只有明確允許的流量才能通過。

網路架構設計影響整體效能與安全性。預約架構諮詢,讓我們幫你檢視設計。



儲存架構

儲存概念

OpenShift 使用 Kubernetes 標準的儲存抽象:

概念說明
PersistentVolume(PV)叢集層級的儲存資源
PersistentVolumeClaim(PVC)使用者對儲存的請求
StorageClass儲存的「規格」,定義如何動態建立 PV

動態供應

大部分情況下使用 動態供應(Dynamic Provisioning)

  1. 使用者建立 PVC,指定 StorageClass
  2. StorageClass 的 Provisioner 自動建立 PV
  3. PV 與 PVC 綁定
  4. Pod 掛載 PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: gp3-csi

OpenShift Data Foundation(ODF)

ODF 是 Red Hat 的軟體定義儲存方案:

ODF 適合:

CSI 驅動程式

OpenShift 支援各種 CSI(Container Storage Interface) 驅動程式:



安全架構

OpenShift 的安全是「預設嚴格」,這跟原生 Kubernetes 的「預設寬鬆」很不一樣。

RBAC(角色型存取控制)

RBAC 控制「誰能做什麼」:

資源說明
RoleNamespace 層級的權限
ClusterRole叢集層級的權限
RoleBinding把 Role 綁定給使用者
ClusterRoleBinding把 ClusterRole 綁定給使用者
# 給使用者 developer 在 my-project 的編輯權限
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: developer-edit
  namespace: my-project
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: edit
subjects:
- kind: User
  name: developer

SCC(Security Context Constraints)

SCC 是 OpenShift 特有的安全機制,控制 Pod 能做什麼。

預設的 SCC:

SCC限制程度說明
restricted最嚴格預設,禁止特權操作
restricted-v2嚴格新版預設,符合 Pod Security Standards
nonroot中等允許非 root 使用者
anyuid寬鬆允許任意 UID
privileged最寬鬆允許特權容器

很多從 Docker 或原生 K8s 遷移過來的應用會遇到權限問題,通常是因為 OpenShift 預設用 restricted SCC。

映像檔安全

OpenShift 內建映像檔安全機制:

# 限制只能使用特定 Registry 的映像檔
apiVersion: config.openshift.io/v1
kind: Image
metadata:
  name: cluster
spec:
  registrySources:
    allowedRegistries:
    - quay.io
    - registry.redhat.io
    - image-registry.openshift-image-registry.svc:5000


高可用性設計

Control Plane HA

OpenShift 生產環境建議 3 個 Control Plane 節點

Load Balancer
                         │
         ┌───────────────┼───────────────┐
         │               │               │
    ┌────▼────┐     ┌────▼────┐     ┌────▼────┐
    │ Master 1│     │ Master 2│     │ Master 3│
    │ API     │     │ API     │     │ API     │
    │ etcd    │◄───►│ etcd    │◄───►│ etcd    │
    │ Ctrl    │     │ Ctrl    │     │ Ctrl    │
    └─────────┘     └─────────┘     └─────────┘

跨區域部署

在雲端環境,建議跨 3 個可用區(AZ) 部署:

災難復原

災難復原策略:

策略RPORTO複雜度
etcd 備份還原小時級小時級
主動-被動叢集分鐘級分鐘級
主動-主動叢集近即時近即時

etcd 定期備份是最基本的:

# 備份 etcd
oc get pods -n openshift-etcd
oc rsh -n openshift-etcd etcd-master-0
etcdctl snapshot save /var/lib/etcd/snapshot.db


常見問題 FAQ

Q1:OpenShift 架構跟 Kubernetes 差在哪?

主要差異在三個地方:(1)作業系統用不可變的 RHCOS,設定統一由 Operator 管理;(2)所有元件都用 Operator 模式,包括 OpenShift 自己的組件;(3)預設安全機制更嚴格,如 SCC 限制容器權限。底層還是 Kubernetes,但上層包裝完全不同。

Q2:Operator 跟 Helm 有什麼不同?

Helm 是打包工具,幫你把一堆 YAML 打包成 Chart,安裝時展開。Operator 是運行時的管理程式,會持續監控應用狀態並自動處理(升級、備份、故障復原)。Helm 安裝完就結束了,Operator 安裝完才開始工作。兩者可以搭配使用。

Q3:為什麼 OpenShift 用 CRI-O 而不是 Docker?

Docker 功能太多,Kubernetes 只需要「跑容器」這一個功能。CRI-O 專為 Kubernetes 設計,只實作 CRI(Container Runtime Interface),更輕量、更安全、更穩定。而且 Kubernetes 1.24 已經移除 dockershim,Docker 不再是官方支援的運行時。

Q4:etcd 壞了怎麼辦?

如果只壞一個節點,etcd 叢集會自動處理(3 節點容許 1 個故障)。如果壞超過半數,叢集就無法運作,需要從備份還原。所以一定要定期備份 etcd,而且備份要存到叢集外部。OpenShift 4.x 有自動備份機制,但還是要確認備份真的有在跑。

Q5:SCC 一直擋我的應用怎麼辦?

先確認應用是否真的需要那些權限。很多應用其實不需要 root,只是 Dockerfile 沒寫好。如果確實需要,可以:(1)修改 Deployment 的 securityContext;(2)建立 ServiceAccount 並綁定適當的 SCC;(3)最後手段才考慮用 anyuid 或 privileged。



OpenShift 架構需要第二意見?

好的架構能節省數倍的營運成本。從 Control Plane 配置到網路設計,每個決策都會影響後續的穩定性與擴展性。

預約架構諮詢,讓我們一起檢視你的容器平台規劃。



參考資源

OpenShiftAWSKubernetesDocker
上一篇
OpenShift 是什麼?Red Hat 容器平台完整指南【2026】
下一篇
OpenShift AI:企業 AI/ML 平台完整指南【2026】