Skip to content
Open Source

建立與管理專案

建立專案、把既有的 Namespace 加進 Zeabur、修改專案名稱和圖示,並控制其他專案能不能連進來。

專案就是一個帶 zeabur.com/project: "true" 標籤的 Kubernetes Namespace。在 專案 頁按 新增專案 建立新的,或把叢集裡既有的 Namespace 加進來。專案的名稱、描述、圖示和網路隔離,都在專案 設定 修改。

  • 建立專案要能建立 Namespace。把既有 Namespace 加進 Zeabur 或移出,要有那個 Namespace 的 zeabur-manage 權限,通常只有管理員有,見專案 Namespace 的保護。
  • 專案名稱也是 Namespace 名稱,建立後不能改。只能用小寫字母、數字和連字號,開頭和結尾是字母或數字,最多 63 個字元,也不能用 kube- 開頭。

到 專案 頁,按 新增專案。名稱 填 hello,顯示名稱 可以留白,填了就會取代名稱顯示在畫面上。

同名的 Namespace 已經存在時,表單會提示你改用既有的 Namespace,做法見下一節。

送出後,檢查畫面列出要建立的物件:

  • Namespace hello,帶專案標籤和三個 Pod Security 標籤,等級都是 baseline。服務可以用 root 執行,但不能存取主機。
  • default ServiceAccount 設成 automountServiceAccountToken: false,沒有指定 ServiceAccount 的副本不會拿到 Kubernetes API 的 token。
  • 叢集有標了 zeabur.com/platform: "true" 的 Namespace 時(用 Zeabur 安裝程式裝的叢集都有),還有 NetworkPolicy zeabur-project,其他專案的副本連不進來。

確認後套用,畫面會進入新的專案。

專案 頁的 其他 Namespace 列出還不是專案的 Namespace。在那一列打開選單,選 使用這個 Namespace,檢查後套用。

Zeabur 只替 Namespace 加上 zeabur.com/project: "true" 標籤,裡面的物件、Pod Security 標籤和 NetworkPolicy 都不會變。

不想再在 Zeabur 看到它時,到專案 設定 的 危險區域 按 從 Zeabur 移除。這只會拿掉專案標籤,Namespace 和裡面的一切都會保留。要連同內容一起刪掉,見刪除專案。

到專案 設定 的 基本資訊:

  • 專案名稱:取代 Namespace 名稱顯示,最多 64 個字元。
  • 描述:專案的用途,顯示在名稱下方,最多 500 個字元。
  • 圖示:按 更換圖示 從 16 個圖示選一個。

按 儲存詳細資料,檢查後套用。這三項存在 Namespace 的 annotation 上。專案的開發者可以改這三項,其他 label 和 annotation 只有管理員能改。

到專案 設定 的 網路,其他專案 一列說明目前的狀態:

  • 叢集裡任何副本都連得到這個專案的服務。:還沒有隔離。按 隔離,檢查後套用,Zeabur 會建立 NetworkPolicy zeabur-project。
  • 連不到這個專案的服務。專案內的服務和 Zeabur 元件不受影響。:已經隔離。

隔離後,專案內的副本互相連得到,標了 zeabur.com/platform: "true" 的 Namespace(例如 Traefik 和資料庫 operator 所在的 Namespace)和 kube-system 也連得到。

要讓另一個專案連進來,按 允許其他專案連入,選擇專案,按 允許,檢查後套用。Zeabur 建立 NetworkPolicy zeabur-allow-from-<那個專案>,對方的所有副本都能連到這個專案的所有服務。要取消,在那一列按 移除。

畫面上沒有取消隔離的按鈕,要用 kubectl 刪除 zeabur-project,見下一節。規則是否真的生效,取決於叢集的網路外掛(CNI)是否支援 NetworkPolicy。

專案的一切都是 Namespace 上的標籤、annotation 和一般的 NetworkPolicy。移除 Zeabur 之後,這些設定照樣由 Kubernetes 執行。

和 Zeabur 建立的內容相同:

apiVersion: v1
kind: Namespace
metadata:
name: demo
labels:
zeabur.com/project: "true"
pod-security.kubernetes.io/enforce: baseline
pod-security.kubernetes.io/audit: baseline
pod-security.kubernetes.io/warn: baseline
annotations:
zeabur.com/display-name: Demo shop
zeabur.com/description: The shop's web and worker
zeabur.com/icon: storefront
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: default
namespace: demo
automountServiceAccountToken: false

zeabur.com/icon 可以是 folder、globe、storefront、rocket、cube、database、cloud、code、terminal、chart、chat、book、flask、game、heart 或 briefcase。

加入、移出專案和修改詳細資料

Section titled “加入、移出專案和修改詳細資料”
kubectl label namespace demo zeabur.com/project=true
kubectl label namespace demo zeabur.com/project-
kubectl annotate namespace demo --overwrite zeabur.com/display-name='Demo shop'

Zeabur 沒有修改專案 Pod Security 等級的畫面,由管理員用 kubectl 改。改成 restricted 後,只有 嚴格 的服務能啟動:

kubectl label namespace demo --overwrite \
pod-security.kubernetes.io/enforce=restricted \
pod-security.kubernetes.io/audit=restricted \
pod-security.kubernetes.io/warn=restricted

服務自己的等級見調整服務設定。

zeabur-project 允許同專案的副本、zeabur.com/platform: "true" 的 Namespace 和 kube-system 連入:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: zeabur-project
namespace: demo
labels:
app.kubernetes.io/managed-by: zeabur
spec:
podSelector: {}
policyTypes: [Ingress]
ingress:
- from:
- podSelector: {}
- namespaceSelector:
matchLabels:
zeabur.com/platform: "true"
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system

允許專案 shop 連進來:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: zeabur-allow-from-shop
namespace: demo
labels:
app.kubernetes.io/managed-by: zeabur
spec:
podSelector: {}
policyTypes: [Ingress]
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: shop

取消隔離:

kubectl -n demo delete networkpolicy zeabur-project

專案 頁會列出這個專案,顯示你設定的名稱、描述和圖示。專案 設定 的 網路 寫出目前是否隔離,以及哪些專案能連進來。

kubectl get namespace demo --show-labels
kubectl get namespace -l zeabur.com/project=true
kubectl -n demo get networkpolicy
kubectl -n demo get serviceaccount default -o jsonpath='{.automountServiceAccountToken}'

第一行的標籤裡有 zeabur.com/project=true 和 pod-security.kubernetes.io/enforce=baseline。第二行列出所有專案。隔離後,第三行會列出 zeabur-project。最後一行印出 false。

畫面或結果接著處理
已經有同名的 Namespace,可以改為使用既有的 Namespace。換一個名稱,或到 其他 Namespace 把它加進 Zeabur。
加入或移出專案時,叢集回覆 Only an admin can change the namespace's labels只有管理員能改 Namespace 的標籤,請管理員操作。
這是 Kubernetes 留給自身元件的 Namespace,不能當作專案。kube- 開頭的 Namespace 和節點終端機用的 zeabur-node-shell 都不能當作專案。
建立專案時沒有列出 zeabur-project叢集沒有標了 zeabur.com/platform: "true" 的 Namespace,Zeabur 分不出 Ingress controller 在哪裡,所以不建立。請管理員替這些 Namespace 加上標籤,再到 網路 按 隔離。
隔離後公開網域打不開Ingress controller 所在的 Namespace 沒有 zeabur.com/platform: "true" 標籤。替它加上標籤,或在 zeabur-project 加一條允許它的規則。