安裝 Kong Gateway Operator
Kong Gateway Operator 可以部署和管理連接到 Konnect 控制平面的數(shù)據(jù)平面。所有服務(wù)、路由和插件均在 Konnect 中配置,并自動(dòng)發(fā)送到數(shù)據(jù)平面。
安裝
更新 Helm 倉(cāng)庫(kù)
helm repo add kong https://charts.konghq.com
helm repo update kong
使用 Helm 安裝 Kong Gateway Operator
helm upgrade --install kgo kong/gateway-operator -n kong-system --create-namespace \
--set image.tag=1.5 \
--set kubernetes-configuration-crds.enabled=true \
--set env.ENABLE_CONTROLLER_KONNECT=true
你可以使用 kubectl wait 等待 Operator 準(zhǔn)備就緒:
kubectl -n kong-system wait --for=condition=Available=true --timeout=120s deployment/kgo-gateway-operator-controller-manager
gateway-operator-controller-manager 部署準(zhǔn)備就緒后,你就可以部署連接到 Konnect 控制平面的數(shù)據(jù)平面資源。
創(chuàng)建 KonnectExtension
為了將 Kong DataPlane 綁定到 Konnect ControlPlane,你可以使用 KonnectExtension(CRD參考)。
你可以在本指南中了解有關(guān)如何使用 KonnectExtension 對(duì)象的更多信息。
將數(shù)據(jù)平面綁定到 Konnect 控制平面
Kong 的 DataPlane(數(shù)據(jù)平面)可以配置為使用自管理的 Hybrid 控制平面或 KIC 控制平面。這意味著在 KonnectExtension 對(duì)象中引用的 controlPlane 實(shí)體(通過(guò) KonnectID 或 NamespacedRef)必須屬于這兩類之一。但需要特別注意的是,如果 Konnect 控制平面是 KIC 類型,那么 Kong 的 DataPlane 必須在集群中運(yùn)行一個(gè) Kubernetes 控制平面(即一個(gè) ControlPlane CRD 實(shí)例),才能正確配置。在這種場(chǎng)景下,強(qiáng)烈推薦使用 Gateway 來(lái)進(jìn)行流量管理。
下面的命令可以用來(lái)配置一個(gè) KonnectExtension,它用于將一個(gè) Gateway 或 DataPlane 連接到 Konnect。你可以在概覽頁(yè)面中找到所有可用的 KonnectExtension 配置選項(xiàng)。
echo '
kind: KonnectExtension
apiVersion: konnect.konghq.com/v1alpha1
metadata:
name: my-konnect-config
namespace: default
spec:
clientAuth:
certificateSecret:
provisioning: Automatic
konnect:
controlPlane:
ref:
type: konnectNamespacedRef
konnectNamespacedRef:
name: gateway-control-plane' | kubectl apply -f -
部署數(shù)據(jù)平面
為了將 Kong DataPlane 綁定到 Konnect ControlPlane,你可以使用 KonnectExtension(CRD參考)。
創(chuàng)建數(shù)據(jù)平面
使用 KonnectExtension 參考配置 Kong DataPlane。
echo '
apiVersion: gateway-operator.konghq.com/v1beta1
kind: DataPlane
metadata:
name: dataplane-example
spec:
extensions:
- kind: KonnectExtension
name: my-konnect-config
group: konnect.konghq.com
deployment:
podTemplateSpec:
spec:
containers:
- name: proxy
image: kong/kong-gateway:3.10.0.1' | kubectl apply -f -
創(chuàng)建一個(gè)路由
現(xiàn)在已經(jīng)有了控制平面和數(shù)據(jù)平面,可以配置服務(wù)和路由來(lái)處理流量。
創(chuàng)建服務(wù)
在 Kubernetes 集群中創(chuàng)建 KongService 對(duì)象將會(huì)在 Gateway Manager 中配置一個(gè) Kong Konnect 服務(wù)。你可以參考 CR API 來(lái)查看所有可用字段。
你的 KongService 必須與你在集群中創(chuàng)建的 KonnectGatewayControlPlane 對(duì)象關(guān)聯(lián)。它將成為網(wǎng)關(guān)控制平面配置的一部分。
通過(guò)應(yīng)用以下 YAML 清單創(chuàng)建 KongService:
echo '
kind: KongService
apiVersion: configuration.konghq.com/v1alpha1
metadata:
name: service
namespace: default
spec:
name: service
host: httpbin.konghq.com
controlPlaneRef:
type: konnectNamespacedRef # This indicates that an in cluster reference is used
konnectNamespacedRef:
name: gateway-control-plane # Reference to the KonnectGatewayControlPlane object
' | kubectl apply -f -
此時(shí),你應(yīng)該在網(wǎng)關(guān)管理器 UI 中看到該服務(wù)。
創(chuàng)建路由
在 Kubernetes 集群中創(chuàng)建 KongRoute 對(duì)象將會(huì)在網(wǎng)關(guān)管理器中配置一個(gè) Kong Konnect 路由。你可以參考 CR API 來(lái)查看所有可用字段。
將路由和服務(wù)關(guān)聯(lián)
你可以通過(guò)應(yīng)用以下 YAML 清單來(lái)創(chuàng)建與 KongService 關(guān)聯(lián)的 KongRoute:
echo '
kind: KongRoute
apiVersion: configuration.konghq.com/v1alpha1
metadata:
name: route-with-service
namespace: default
spec:
name: route-with-service
protocols:
- http
paths:
- /
serviceRef:
type: namespacedRef
namespacedRef:
name: service # KongService reference
' | kubectl apply -f -
發(fā)送測(cè)試流量
創(chuàng)建服務(wù)和路由后,將流量發(fā)送到代理,代理會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到 httpbin.konghq.com。你可以使用 httpbin 的 /anything 端點(diǎn)來(lái)回顯響應(yīng)中發(fā)出的請(qǐng)求。
要向代理發(fā)出請(qǐng)求,請(qǐng)使用 kubectl get services 獲取 LoadBalancer 的 IP 地址:
export PROXY_IP=$(kubectl get services -o json | jq -r '.items[] | .status.loadBalancer?|.ingress[]?|.ip')
echo "Proxy IP: $PROXY_IP"
通過(guò)向代理 IP 地址發(fā)送請(qǐng)求來(lái)測(cè)試路由規(guī)則:
curl $PROXY_IP/anything/hello