安装 Kong Gateway Operator
Kong Gateway Operator 可以部署和管理连接到 Konnect 控制平面的数据平面。所有服务、路由和插件均在 Konnect 中配置,并自动发送到数据平面。
安装
更新 Helm 仓库
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 准备就绪:
kubectl -n kong-system wait --for=condition=Available=true --timeout=120s deployment/kgo-gateway-operator-controller-manager
gateway-operator-controller-manager 部署准备就绪后,你就可以部署连接到 Konnect 控制平面的数据平面资源。
创建 KonnectExtension
为了将 Kong DataPlane 绑定到 Konnect ControlPlane,你可以使用 KonnectExtension(CRD参考)。
你可以在本指南中了解有关如何使用 KonnectExtension 对象的更多信息。
将数据平面绑定到 Konnect 控制平面
Kong 的 DataPlane(数据平面)可以配置为使用自管理的 Hybrid 控制平面或 KIC 控制平面。这意味着在 KonnectExtension 对象中引用的 controlPlane 实体(通过 KonnectID 或 NamespacedRef)必须属于这两类之一。但需要特别注意的是,如果 Konnect 控制平面是 KIC 类型,那么 Kong 的 DataPlane 必须在集群中运行一个 Kubernetes 控制平面(即一个 ControlPlane CRD 实例),才能正确配置。在这种场景下,强烈推荐使用 Gateway 来进行流量管理。
下面的命令可以用来配置一个 KonnectExtension,它用于将一个 Gateway 或 DataPlane 连接到 Konnect。你可以在概览页面中找到所有可用的 KonnectExtension 配置选项。
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 -
部署数据平面
为了将 Kong DataPlane 绑定到 Konnect ControlPlane,你可以使用 KonnectExtension(CRD参考)。
创建数据平面
使用 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 -
创建一个路由
现在已经有了控制平面和数据平面,可以配置服务和路由来处理流量。
创建服务
在 Kubernetes 集群中创建 KongService 对象将会在 Gateway Manager 中配置一个 Kong Konnect 服务。你可以参考 CR API 来查看所有可用字段。
你的 KongService 必须与你在集群中创建的 KonnectGatewayControlPlane 对象关联。它将成为网关控制平面配置的一部分。
通过应用以下 YAML 清单创建 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 -
此时,你应该在网关管理器 UI 中看到该服务。
创建路由
在 Kubernetes 集群中创建 KongRoute 对象将会在网关管理器中配置一个 Kong Konnect 路由。你可以参考 CR API 来查看所有可用字段。
将路由和服务关联
你可以通过应用以下 YAML 清单来创建与 KongService 关联的 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 -
发送测试流量
创建服务和路由后,将流量发送到代理,代理会将请求转发到 httpbin.konghq.com。你可以使用 httpbin 的 /anything 端点来回显响应中发出的请求。
要向代理发出请求,请使用 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"
通过向代理 IP 地址发送请求来测试路由规则:
curl $PROXY_IP/anything/hello