部署方式

混合部署

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、GatewayGatewayConfiguration 對象,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 資源包含了多個子組件,例如 ControlPlaneDataPlane,這些組件會代替它創(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 資源。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • k8s Ingress 服務(wù)部署方式 通常情況下,service和pod僅可在集群內(nèi)部網(wǎng)絡(luò)中通過IP地址訪問。所有...
    張家鋒閱讀 3,824評論 0 1
  • 學(xué)過PHP的都了解,php的正式環(huán)境部署非常簡單,改幾個文件就OK,用FastCgi方式也是分分鐘的事情。相比起來...
    妄心xyx閱讀 1,435評論 0 22
  • 分享一篇文章,總結(jié)了很多Python Web 部署的內(nèi)容,原文位于:Python Web部署方式總結(jié) 不要讓服務(wù)器...
    妄心xyx閱讀 867評論 0 13
  • 學(xué)過PHP的都了解,php的正式環(huán)境部署非常簡單,改幾個文件就OK,用FastCgi方式也是分分鐘的事情。相比起來...
    生活的探路者閱讀 246評論 0 0
  • 在部署的方式的第一部分我們介紹了基礎(chǔ)設(shè)施即代碼的概念、原則和工具,那么現(xiàn)在我們就來看看應(yīng)用部署的方式有哪些。 In...
    iambowen閱讀 7,860評論 0 9

友情鏈接更多精彩內(nèi)容