混合部署
Kong Gateway Operator 通過混合模式部署,負(fù)責(zé)部署和管理連接外部控制平面的 DataPlane 資源。
這個外部控制平面可以是 Kong Konnect 提供的,也可以是你自己搭建和管理的。
安裝
Konnect
# 在應(yīng)用這個配置之前,請先創(chuàng)建一個包含集群證書的 Secret。
# kubectl create secret tls konnect-client-tls -n kong --cert=./tls.crt --key=./tls.key
# https://docs.konghq.com/gateway-operator/1.5.x/get-started/konnect/install/
echo "
kind: KonnectExtension
apiVersion: gateway-operator.konghq.com/v1alpha1
metadata:
name: example-konnect-config
namespace: kong
spec:
controlPlaneRef:
type: konnectID
konnectID: <CP_ID>
controlPlaneRegion: <REGION>
serverHostname: <HOSTNAME>
konnectControlPlaneAPIAuthConfiguration:
clusterCertificateSecretRef:
name: konnect-client-tls
---
apiVersion: gateway-operator.konghq.com/v1beta1
kind: DataPlane
metadata:
name: dataplane-example
namespace: kong
spec:
extensions:
- kind: KonnectExtension
name: example-konnect-config
group: gateway-operator.konghq.com
deployment:
podTemplateSpec:
spec:
containers:
- name: proxy
image: kong/kong-gateway:3.10.0.1
env:
- name: KONG_LOG_LEVEL
value: debug
" | kubectl apply -f -
Self Managed
# 在執(zhí)行應(yīng)用操作之前,請確保已創(chuàng)建一個包含集群證書的 Secret。
# kubectl create secret tls kong-cluster-cert -n kong --cert=./tls.crt --key=./tls.key
# 請注意,cluster_control_plane 的值會根據(jù)你的環(huán)境有所不同。
# control-plane-release-name 需要替換為你實(shí)際的控制平面發(fā)布名稱,
# hybrid 則替換為它所在的命名空間。
echo "
apiVersion: gateway-operator.konghq.com/v1beta1
kind: DataPlane
metadata:
name: dataplane-example
namespace: kong
spec:
deployment:
podTemplateSpec:
spec:
containers:
- name: proxy
image: kong/kong-gateway:3.10.0.1
env:
- name: KONG_ROLE
value: data_plane
- name: KONG_DATABASE
value: "off"
- name: KONG_CLUSTER_CERT
value: /etc/secrets/kong-cluster-cert/tls.crt
- name: KONG_CLUSTER_CERT_KEY
value: /etc/secrets/kong-cluster-cert/tls.key
- name: KONG_LUA_SSL_TRUSTED_CERTIFICATE
value: system
- name: KONG_CLUSTER_CONTROL_PLANE
value: control-plane-release-name-kong-cluster.hybrid.svc.cluster.local:8005
- name: KONG_CLUSTER_TELEMETRY_ENDPOINT
value: control-plane-release-name-kong-clustertelemetry.hybrid.svc.cluster.local:8006
volumeMounts:
- name: cluster-certificate
mountPath: /var/cluster-certificate
- name: kong-cluster-cert
mountPath: /etc/secrets/kong-cluster-cert/
readOnly: true
volumes:
- name: cluster-certificate
- name: kong-cluster-cert
secret:
secretName: kong-cluster-cert
defaultMode: 420
" | kubectl apply -f -
無數(shù)據(jù)庫部署
Kong Gateway Operator 可以自動部署 Kong Ingress Controller 的控制平面和數(shù)據(jù)平面資源。
無數(shù)據(jù)庫部署使用 Kubernetes Gateway API 來實(shí)現(xiàn)。你配置 GatewayClass、Gateway 和 GatewayConfiguration 對象,Kong Gateway Operator 會將這些配置轉(zhuǎn)換成 Kong 特定的配置。
安裝
echo "
kind: GatewayConfiguration
apiVersion: gateway-operator.konghq.com/v1beta1
metadata:
name: kong
namespace: default
spec:
dataPlaneOptions:
deployment:
podTemplateSpec:
spec:
containers:
- name: proxy
image: kong/kong-gateway:3.10.0.1
controlPlaneOptions:
deployment:
podTemplateSpec:
spec:
containers:
- name: controller
image: kong/kubernetes-ingress-controller:3.4.4
env:
- name: CONTROLLER_LOG_LEVEL
value: debug
---
kind: GatewayClass
apiVersion: gateway.networking.k8s.io/v1
metadata:
name: kong
spec:
controllerName: konghq.com/gateway-operator
parametersRef:
group: gateway-operator.konghq.com
kind: GatewayConfiguration
name: kong
namespace: default
---
kind: Gateway
apiVersion: gateway.networking.k8s.io/v1
metadata:
name: kong
namespace: default
spec:
gatewayClassName: kong
listeners:
- name: http
protocol: HTTP
port: 80
" | kubectl apply -f -
現(xiàn)在,你可以運(yùn)行 kubectl get -n default gateway kong 來獲取正在運(yùn)行的網(wǎng)關(guān)的 IP 地址。
注意:如果你的集群無法創(chuàng)建 LoadBalancer 類型的服務(wù),那么你獲得的 IP 地址可能只能在集群內(nèi)部路由。
配置網(wǎng)關(guān)
Gateway 資源包含了多個子組件,例如 ControlPlane 和 DataPlane,這些組件會代替它創(chuàng)建和管理。從更深的技術(shù)層面來看,ControlPlane 對應(yīng) Kong Ingress Controller,而 DataPlane 對應(yīng) Kong Gateway。
雖然這些子組件的配置不是主要用途,但你可以通過 GatewayConfiguration API 提供配置。這些配置可以包括子組件使用的容器鏡像和鏡像版本,還可以覆蓋環(huán)境變量和卷掛載,這些設(shè)置將傳遞到為該組件創(chuàng)建的 Pods 中。
例如:
kind: GatewayConfiguration
apiVersion: gateway-operator.konghq.com/v1beta1
metadata:
name: kong
namespace: default
spec:
dataPlaneOptions:
deployment:
podTemplateSpec:
spec:
containers:
- name: proxy
image: kong/kong-gateway:3.10.0.1
env:
- name: TEST_VAR
value: TEST_VAL
controlPlaneOptions:
deployment:
podTemplateSpec:
spec:
containers:
- name: controller
image: kong/kubernetes-ingress-controller:3.4.4
env:
- name: TEST_VAR
value: TEST_VAL
像上面的配置可以在 API 上創(chuàng)建,但在被 GatewayClass 引用之前是不會生效的。
kind: GatewayClass
apiVersion: gateway.networking.k8s.io/v1
metadata:
name: kong
spec:
controllerName: konghq.com/gateway-operator
parametersRef:
group: gateway-operator.konghq.com
kind: GatewayConfiguration
name: kong
namespace: default
通過在 GatewayClass 中使用 parametersRef 來綁定 GatewayConfiguration,這個配置會自動應(yīng)用到所有為該類創(chuàng)建的 Gateway 資源,甚至?xí)厮莸街皠?chuàng)建的那些 Gateway 資源。