在 KinD(Kubernetes in Docker) 中建立 LoadBalancer Service:使用 Cloud-Provider-KinD
KinD 是 Kubernetes 社區開發者最常用的本地集群工具之一,因為它基於 Docker,默認情況下並不支持 LoadBalancer 類型的 Service。而 Cloud-Provider-KinD 是一個專為 KinD 集群設計的插件,提供模擬的 LoadBalancer 功能,使開發者能夠更接近雲端環境進行測試。
先決條件
在開始之前,請確保您的 macOS 環境已經具備以下軟體:
-
Homebrew:macOS 的套件管理工具,用來安裝其他必要軟體。
-
KinD: 一種基於 Docker 的本地 Kubernetes 集群工具,用於在本地開發與測試 Kubernetes 工作負載。 可以透過 Homebrew 安裝:
brew install kind
更多詳細說明可參考 在本機用 KinD 建立 Kubernetes。
-
Golang: 使用 cloud-provider-kind,需要先安裝 Go (Golang) 開發環境,因為這個工具是用 Go 編寫的,並需要通過 Go 的包管理器進行安裝。
brew install go
安裝 Cloud-Provider-KinD
下載並安裝 Cloud-Provider-KinD
Cloud-Provider-KinD 是一個獨立的二進制文件,需要在主機上運行,並連接到 KinD 集群。可以使用以下命令安裝:
go install sigs.k8s.io/cloud-provider-kind@latest
啟動 Cloud-Provider-KinD
sudo cloud-provider-kind
請注意,Cloud-Provider-KinD 需要獲取系統權限以打開端口並連接到容器運行時,因此需要使用 sudo。 啟動後,Cloud-Provider-KinD 會監控所有 KinD 集群中的 LoadBalancer 類型的服務,並為其配置對應的負載均衡器容器。
驗證配置
部署 LoadBalancer 類型的服務
現在,可以在 KinD 集群中創建 LoadBalancer 類型的服務。以下是一個範例,創建一個回顯 “foo” 的服務:
創建foo-service.yaml
cat > foo-service.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:
name: foo-app
labels:
app: http-echo
spec:
containers:
- name: foo-app
image: hashicorp/http-echo:0.2.3
args:
- "-text=foo"
---
apiVersion: v1
kind: Service
metadata:
name: foo-service
spec:
type: LoadBalancer
selector:
app: http-echo
ports:
- port: 5678
EOF
kubectl apply -f foo-service.yaml
使用cURL驗證服務
Cloud-Provider-KinD 會自動為該服務創建對應的負載均衡器容器,並分配一個外部 IP。可以使用以下命令查看服務的外部 IP:
kubectl get svc foo-service
成功後會顯示以下類似訊息
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
foo-service LoadBalancer 10.96.53.15 172.19.0.3 5678:31524/TCP 15s
一旦外部 IP 分配完成,可以使用 curl 測試服務
curl http://<EXTERNAL-IP>:5678
這邊範例的EXTERNAL-IP會變成是172.19.0.3
curl http://172.19.0.3:5678
foo
如果配置正確,應該會看到 “foo” 的響應。