Skip to main content
雲端安全

Kubernetes 基礎架構即程式碼:定義與關鍵概念

了解基礎架構即程式碼(IaC)如何簡化並精簡您的 Kubernetes 部署,以提升效率、一致性,以及輕鬆複製的能力。非常適合開發人員、工程師和安全專業人士!

作者 SentinelOne
Kubernetes 基礎架構即程式碼:定義與關鍵概念

想像您是團隊中的開發人員,負責在 Kubernetes 上部署新的 Web 應用程式。但您希望能以高效率、一致且易於複製的方式完成這項任務。那麼,讓我們來談談適用於 Kubernetes 的基礎架構即程式碼(IaC)!

在這篇文章中,我們將探討 IaC 如何精簡您的 Kubernetes 叢集管理。無論您是充滿好奇的開發人員、平台工程師,甚至是想了解 IaC 如何運作的安全工程師,這篇文章都適合您。在本文結束時,您將具備在 Kubernetes 中使用 IaC 的扎實基礎。

Kubernetes IaC 的關鍵概念

在深入探討之前,先讓我們熟悉一些關鍵概念。我們將以 Web 應用程式為例來說明這些想法,並嘗試使用一些類比,讓我更容易解釋,也讓您更容易記住關鍵概念與想法。

假設您正在向建築師描述您夢想中的房子。您不會告訴他們每一塊磚要如何鋪設;您描述的是您想要的最終結果。這就是宣告式組態的核心概念。對於我們的 Web 應用程式,我們會告訴 Kubernetes 我們想要什麼(例如,讓三個 Web 伺服器執行個體運作),而它會自行找出如何實現。

現在,假設你不是翻修房子,而是可以立即建立一個全新且更新過的版本,會怎麼樣?這就是不可變基礎架構背後的概念。當我們需要更新網頁應用程式時,我們會建立全新且更新過的版本,而不是修改現有資源。接著,IaC 的另一個關鍵概念是使用像 Git 這樣的工具進行版本控制。這可讓你追蹤變更、與團隊協作,甚至在發生問題時回到先前的狀態(如果你在變更正式上線前先進行審查與測試,這種情況可能不會太常發生)。

最後,想像您擁有一道魔法咒語,可以在世界任何地方立即重建整個 Web 應用程式設定,而且與原本完全相同。這就是 IaC 中可重現性與一致性的力量。您可以在不同區域啟動全新的環境,或者至少這應該是應有的思維方式。

Kubernetes IaC 的標準工具

現在我們已掌握基礎,接著來看看一些可用來建置 Web 應用程式基礎架構的工具。我們將聚焦於三個主要工具:Kubernetes YAML 檔案、Helm 和 Terraform。

1. Kubernetes YAML 檔案

YAML 檔案就像是您 Kubernetes 建置項目的藍圖。它們會精確告訴 Kubernetes 您想建置什麼,以及它應該呈現什麼樣貌。讓我們看看如何使用它們在 Kubernetes 叢集上設定 Web 應用程式。

使用 IaC 設定 Kubernetes 叢集

首先,我們需要準備工作區。請確認您已安裝並設定 kubectl CLI。接著,我們將撰寫 Kubernetes YAML 資訊清單。以下是一個簡單範例:

apiVersion: apps/v1

kind: Deployment

metadata:

  name: web-app

spec:

  replicas: 3

  selector:

    matchLabels:

      app: web

  template:

    metadata:

      labels:

        app: web

    spec:

      containers:

      - name: web-container

        image: your-web-app:latest

        ports:

        - containerPort: 80

這個 YAML 檔案是在告訴 Kubernetes:「我想要一個具有三個相同執行個體的 Web 應用程式,每個執行個體都在監聽連接埠 80 的容器中執行。」

為了讓我們的規劃成真,我們會使用 kubectl apply 命令:

kubectl apply -f web-app.yaml

就這樣,我們已使用 IaC 在 Kubernetes 叢集中建立了 Web 應用程式。

2. Helm:Kubernetes 套件管理

現在,想像一下,如果您已經有一些為 Web 應用程式中常見結構預先製作好的藍圖,例如資料庫或快取層。這就是 Helm 為 Kubernetes 所做的事。它協助我們封裝、分享及管理 Kubernetes 應用程式。讓我們看看如何在 Web 應用程式的旅程中使用 Helm。

建立 Helm chart

您可以將 Helm chart 想像成 Kubernetes 應用程式的食譜。若要為我們的 Web 應用程式建立一個,我們首先執行:

helm create web-app-chart

這會建立一個包含一些範本檔案的新目錄,就像一本附有一些基本食譜的新食譜書。接著,我們可以自訂這些檔案,以符合 Web 應用程式的需求。

例如,我們可能會修改 values.yaml 檔案,以設定應用程式的複本數:

replicaCount: 3

image:

  repository: your-web-app

  tag: "latest"

使用 Helm 部署應用程式

若要使用 Helm 部署我們的 Web 應用程式,我們會使用 Helm install 命令:

helm install web-app ./web-app-chart

此命令會指示 Helm 安裝我們的 chart,並將 release 命名為「web-app」。

3. 適用於 Kubernetes IaC 的 Terraform

如果說 Kubernetes YAML 檔案和 Helm charts 就像建築藍圖,那麼 Terraform 就像一台通用的施工機器,幾乎可以建造任何東西,甚至包括你正在其上建造的土地!讓我們看看如何使用 Terraform 為我們的 Web 應用程式設定 AWS EKS 叢集。

使用 Terraform 設定 AWS EKS 叢集

以下是一個簡單範例,說明我們如何使用 Terraform 建立 EKS 叢集:

provider "aws" {

  region = "us-west-2"

}

module "eks" {

  source          = "terraform-aws-modules/eks/aws"

  cluster_name    = "web-app-cluster"

  cluster_version = "1.30"

  subnets         = ["subnet-abcde012", "subnet-bcde012a"]

  vpc_id          = "vpc-1234556abcdef"

  node_groups = {

    web_app_nodes = {

      desired_capacity = 3

      max_capacity     = 5

      min_capacity     = 1

      instance_type    = "t3.medium"

    }

  }

}

這段 Terraform 程式碼就像是在向一位建造大師下達指令。它表示:「在 AWS 的這些特定區域中建立一個名為『web-app-cluster』的 EKS 叢集,並設定一組工作節點來執行我們的 Web 應用程式。」

若要套用此組態,我們會執行:

terraform apply

然後大功告成!Terraform 會建立我們的 EKS 叢集,其中包含網路、安全群組和工作節點。


Callout Background Image Gradient

CNAPP Market Guide

Get key insights on the state of the CNAPP market in this Gartner Market Guide for Cloud-Native Application Protection Platforms.

Kubernetes IaC 的最佳實務

現在我們已經了解一些工具,接著來談談如何使用並善用它們。這些最佳實務就像是建造大師用來打造驚人結構的祕密技巧。我可以花上一整天詳細說明這些內容,但先讓我簡要介紹其中最重要的幾項:

  1. 將組態模組化: 不要建立單一龐大且複雜的結構,而是將 Web 應用程式組態拆分為較小且可重複使用的部分。例如,建立 Helm 套件來區隔職責。這樣可讓它們更容易管理與更新。你在 Terraform 中用來建立叢集的 EKS 模組,就是這項實務的良好範例。
  2. 使用環境專屬組態: 為你的開發環境、預備環境和正式上線環境建立不同的組態。這有助於防止錯誤並保持井然有序,同時使用相同的 IaC。維持不同環境之間的一致性是可重複性的關鍵,也有助於降低錯誤。
  3. 版本控制最佳實務: 務必對你的 IaC 檔案使用版本控制,務必要!這可讓你追蹤變更並與團隊協作。
  4. CI/CD 整合策略: 將你的 IaC 整合至 CI/CD 管線中。這可自動化套用基礎架構變更的流程。
  5. 安全性考量: 務必遵循安全性最佳實務。這包括使用最小權限原則,以及定期更新你的組態。

真實世界範例與使用案例

讓我們探索一些 Kubernetes IaC 大放異彩的真實世界情境。想像一下,我們的 Web 應用程式正在快速成長,而我們需要有效率地擴展與管理它。以下說明我們在這段歷程中可能如何使用 IaC。同樣地,我可以為此寫一本到書,但先讓我提供一些想法與範例,說明你可以如何透過 IaC 來做到這一點。

1. 多層式應用程式部署

我們的 Web 應用程式已演變成一個複雜的龐然大物,包含前端、API 伺服器和資料庫。透過 IaC,我們可以在不同檔案中定義每個元件:

# frontend.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

  name: frontend

spec:

  replicas: 3

  # ... 其他規格

---

# api-server.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

  name: api-server

spec:

  replicas: 2

  # ... 其他規格

---

# database.yaml

apiVersion: apps/v1

kind: StatefulSet

metadata:

  name: database

spec:

  serviceName: "database"

  replicas: 1

  # ... 其他規格

透過分離這些元件,您可以獨立管理並擴展我們 Web 應用程式的各個部分。

2. 大規模 Kubernetes 叢集管理

接下來,想像我們的 Web 應用程式正要走向全球!我們需要管理跨不同區域的多個叢集。因此,Terraform 就來救援了:

module "eks_us_west" {

  source       = "./modules/eks-cluster"

  region       = "us-west-2"

  cluster_name = "web-app-us-west"

}

module "eks_eu_central" {

  source       = "./modules/eks-cluster"

  region       = "eu-central-1"

  cluster_name = "web-app-eu-central"

}

此 Terraform 組態可讓您使用相同的模組建立及管理多個 EKS 叢集。

3. 災難復原與備份策略

您可以使用 IaC 實作災難復原計畫。例如,您可以建立一個 Terraform 模組,在不同區域中設定備援 EKS 叢集:

module "backup_cluster" {

  source       = "./modules/eks-cluster"

  region       = "us-east-1"

  cluster_name = "web-app-backup"

}

resource "aws_db_instance" "backup_db" {

  engine         = "postgres"

  instance_class = "db.t3.micro"

  # ... 其他規格

}

此設定可確保當我們的主要叢集發生故障時,您能夠快速啟動備援環境。這就像是在另一個位置安全地儲存我們 Web 應用程式基礎架構的完整複本,隨時可立即啟用。

Kubernetes IaC 的挑戰與解決方案

隨著 Kubernetes 被組織採用於容器協調,IaC 仍然是其有效管理不可或缺的一環。然而,在 Kubernetes 中實作 IaC 時確實存在不少障礙。首先,處理複雜組態被證明是最具挑戰性的障礙。儘管其宣告式方法相當有益,但有時也會導致非常複雜的 YAML 資訊清單,使得管理與版本控制複雜設定變得極具挑戰性。為了解決這個問題,組織可以使用 Helm 等工具進行範本化,並使用 Terraform 建立基礎架構佈建,讓複雜組態更容易管理。

另一項重大挑戰是安全性與合規性。有許多方法可保護 Kubernetes API 的存取、強制執行網路政策,以及實作 RBAC。然而,由於更新總是近在眼前,因此仍需要持續且長期監控其他弱點。定期進行容器掃描並套用安全性修補程式是必要措施。您應整合 IaC 的最佳安全實務來自動化合規檢查,否則這些檢查可能容易因人為錯誤而出問題。

機密與組態資料管理至關重要。組織必須確保敏感資訊不會硬式編碼在 IaC 組態中。將機密管理工具與 Kubernetes 整合,以儲存及管理您的敏感資料;保護對其的存取,並將其限制為僅授權服務可存取。

最後,請監控並稽核對 IaC 組態所做的變更,以確保這些變更的完整性與可追溯性。在 IaC 檔案中使用版本控制與稽核工具,將可清楚掌握所有變更、快速進行疑難排解,並簡化合規報告。如此一來,透過適當的工具與實務來因應這些挑戰,組織便能充分實現 Kubernetes IaC 的潛力。

您的 Kubernetes IaC 旅程的下一步

當我們結束這段對 Kubernetes 與基礎架構即程式碼的(非常)簡短探索時,現在是時候考慮您的下一步了。先從將這些概念套用到您 Web 應用程式的一個小元件開始。從簡單的部分著手,例如為您的前端撰寫基礎架構程式碼。當您看到組態開始運作時,您將獲得實務經驗與信心。

我們討論過的每種工具——Kubernetes YAML、Helm 套件與 Terraform 模組——都提供獨特優勢。請實際試用它們,以了解各自的強項,並判斷哪一種最符合您的需求與工作流程。事實上,您甚至可能會同時使用它們全部。

請記住,採用 IaC 不僅是使用新工具,更關乎改變您的方法。開始以您看待應用程式程式碼的相同方式來思考您的基礎架構。為其進行版本控制、審查它,並持續尋找改進方式。隨著您的進展,請勿忽略安全性與災難復原。隨著基礎架構變得更加複雜,這些面向會變得愈來愈重要。

這裡有一個開始的建議:本週,找出您目前專案中一個尚未使用 IaC 的面向。花一些時間使用我們討論過的其中一種工具,將其轉換為 IaC 格式。部署它、測試它,並反覆改進它。記錄您在此過程中的學習成果。

準備好探索更多了嗎?立即預約通話,深入了解 SentinelOne 的 Kubernetes 安全性工具這裡。

常見問題

Kubernetes 基礎架構即程式碼(IaC)是一種使用程式碼而非手動流程來管理與佈建 Kubernetes 叢集和資源的方法。它可讓您在文字檔中定義基礎架構,這些檔案可在 Git 中進行版本控制、共享,並透過少量命令自動部署。此方法將軟體開發實務帶入基礎架構管理,使其更一致、可重複,且長期而言更易於維護。

Kubernetes 環境可能很快就會變得複雜且難以手動管理。基礎架構即程式碼透過提供自動化與標準化叢集建立及管理的方法來解決此問題。它可讓您快速部署與擴展應用程式、維持不同環境之間的一致性,並在發生故障後輕鬆復原。

此外,IaC 也有助於協作,因為基礎架構組態可像其他任何程式碼一樣被共享、審查與改進。

雖然 Kubernetes 本身並不嚴格等同於基礎架構即程式碼,但它對 IaC 實務提供強力支援與互補。Kubernetes 使用宣告式組態來定義期望狀態,這與 IaC 原則一致。

然而,Kubernetes 單獨並未提供完整 IaC 解決方案的所有功能。更準確地說,Kubernetes 與 IaC 工具能良好搭配運作,讓您能使用程式碼同時管理容器協調層與應用程式定義。

有多種工具支援 Kubernetes 環境中的基礎架構即程式碼。Terraform 因可跨各種雲端供應商佈建與管理 Kubernetes 叢集而廣受歡迎。Helm 有助於封裝與部署 Kubernetes 應用程式,作為套件管理工具。

對於偏好 Kubernetes 原生方法的人而言,自訂資源與 operators 可讓您為 IaC 目的擴充 Kubernetes API。每種工具都有其優勢,許多團隊會搭配使用多種工具,以涵蓋其基礎架構管理需求的不同面向。

深入了解 雲端安全

Decorative background gradient

您的雲端安全——30 分鐘內完成全面評估。

與 SentinelOne 專家會面,評估您在多雲環境中的雲端安全態勢,找出雲端資產、錯誤設定、秘密掃描,並透過 Verified Exploit Paths™ 排定風險優先順序。
Dark dashboard UI with purple-highlighted nav, summary cards showing 149, 7, 78, 56, 1.2 h, and a status table with linked purple text