領先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多Spring Cloud Gateway (SCG) 開源專案已進行擴充套件並針對 Kubernetes 平臺提供了商業版本。此新產品允許您透過將 YAML 配置物件應用於 Kubernetes 叢集來自動化部署 API 閘道器服務。您還可以透過將 YAML 配置應用於叢集來更新 Kubernetes 中 API 閘道器的路由。
Spring Cloud Gateway for Kubernetes 支援路由到任何語言編寫的服務,只要這些服務暴露 HTTP 端點。它提供了一個 Kubernetes 運算子,透過將自定義資源應用到叢集來處理閘道器例項的建立和配置。您可以在 Kubernetes 平臺上動態配置一個衍生的 SCG 例項,以實現持續整合 (CI) 和持續交付 (CD) 流水線的 API 路由更新。此外,SCG for Kubernetes 提供商業 API 路由過濾器,用於單點登入 (SSO) 認證、基於角色的訪問控制、範圍授權、授權令牌中繼、客戶端證書授權、速率限制和熔斷器。Kubernetes 平臺中的 SCG 例項以高可用性執行,並可調整記憶體和 vCPU 資源消耗設定。
Spring Cloud Gateway for Kubernetes 易於安裝和使用。在這篇部落格中,我將展示如何在本地開發環境中安裝 SCG for Kubernetes,並演示如何使用路由建立和配置閘道器例項。您需要安裝 Docker 和 Helm 命令列介面 (CLI) 工具。讓我們首先透過設定一個帶有本地 Kubernetes 叢集的環境來開始。配置叢集時,使用本地 Docker 登錄檔和 Ingress 控制器也會有所幫助。我們可以使用 KinD 建立一個本地叢集。您可以從此處安裝 KinD。首先,我們使用“registry”docker 映象,如下所示,透過埠 5000 啟動一個本地登錄檔(名為 myregistry):
$ Docker run -d –restart=always -p “127.0.0.1:5000” –name myregistry registry:2
您可以使用以下命令建立一個名為 mycluster 的新 KinD 叢集。該叢集由兩個節點組成,一個作為控制平面節點,另一個作為工作負載節點,其埠 80 和 443 對映到您的主機,以用於進入叢集。叢集配置為使用上述本地 Docker 登錄檔。
$ cat <<EOF | kind create cluster --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
containerdConfigPatches:
- |-
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:5000"]
endpoint = ["http://myregistry:5000"]
nodes:
- role: control-plane
- role: worker
kubeadmConfigPatches:
- |
kind: JoinConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
EOF
您需要使用以下命令將登錄檔連線到叢集網路
$ docker network connect mycluster myregistry || true
此外,您需要建立一個 Kubernetes ConfigMap 來配置叢集中的本地登錄檔
$ cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
name: local-registry-hosting
namespace: kube-public
data:
localRegistryHosting.v1: |
host: "localhost:5000"
help: "https://kind.sigs.k8s.io/docs/user/local-registry/"
EOF
這樣,您應該已經準備好帶有微型叢集的本地開發環境了。現在我們可以看看如何部署 SCG for Kubernetes。在您擁有許可證和訪問許可權的情況下,可以從 VMware Tanzu Network 下載 SCG for Kubernetes 的安裝程式。我們將下載當前版本 (1.0.0) 的安裝程式並將其解壓到資料夾中。您需要首先將 Spring Cloud Gateway for Kubernetes docker 映象分配到我們安裝在 localhost 埠 5000 的 docker 登錄檔。從解壓後的資料夾中,執行位於 scripts 目錄中的映象重定位指令碼。此命令將拉取、標記並推送映象到 docker 登錄檔
$ ./scripts/relocate-images.sh localhost:5000
執行以下指令碼完成安裝。預設情況下,Spring Cloud Gateway for Kubernetes 運算子和後端應用程式部署在 spring-cloud-gateway 名稱空間中。
$ ./scripts/ install-spring-cloud-gateway.sh
您現在可以在叢集中建立一個閘道器例項。新的 SCG 例項透過 SpringCloudGateway CRD 派生,新的路由透過 SpringCloudGatewayRouteConfig CRD 定義,而 SpringCloudGatewayMapping CRD 則配置帶有路由的閘道器。

例如,您可以建立一個名為 gateway-config.yaml 的檔案,其中包含以下 YAML 定義
apiVersion: tanzu.vmware.com/v1
kind: SpringCloudGateway
metadata:
name: my-gateway
接下來,將此定義應用到您的 Kubernetes 叢集
$ kubectl apply -f gateway-config.yaml
此配置建立了一個新的閘道器例項(預設情況下,閘道器例項在當前名稱空間中建立)。要新增路由並將路由對映到閘道器,我們需要建立一個描述路由的 SpringCloudGatewayRouteConfig 物件和一個將路由配置對映到閘道器的 SpringCloudGatewayMapping 物件。建立一個名為 route-config.yaml 的檔案,其中包含以下 YAML 定義
apiVersion: tanzu.vmware.com/v1
kind: SpringCloudGatewayRouteConfig
metadata:
name: my-gateway-routes
spec:
routes:
- id: test-route
uri: https://github.com
predicates:
- Path=/github/**
filters:
- StripPrefix=1
然後建立一個名為 mapping.yaml 的檔案,其中包含以下 YAML 定義
apiVersion: tanzu.vmware.com/v1
kind: SpringCloudGatewayMapping
metadata:
name: test-gateway-mapping
spec:
gatewayRef:
name: my-gateway
routeConfigRef:
name: my-gateway-routes
將這兩個定義都應用到您的 Kubernetes 叢集,以使用定義的路由配置閘道器。遵循這些步驟可以使您路由到 Kubernetes 平臺內部或外部的 API。例如,您可以配置 SCG 以將請求從暴露的前端 API 路由到不同的後端協作 API。

上述說明的閘道器配置為路由到 GitHub。您可以安裝一個 Ingress 控制器,以便從叢集外部訪問閘道器。例如,您可以如下安裝 nginx Ingress 控制器
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/kind/deploy.yaml
然後您可以建立一個入口來訪問閘道器。下面建立的入口使用 /gateway 作為路徑到內部 Kubernetes 閘道器服務 my-gateway 的埠 80。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: gateway-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
ingressClassName: nginx
rules:
- http:
paths:
- path: /gateway(/|$)(.*)
pathType: Prefix
backend:
service:
name: my-gateway
port:
number: 80
這樣,您將能夠透過配置的閘道器使用 https:///gateway/github 啟動 GitHub