🌉 Gateway API:使用 Envoy Gateway
前幾篇文章使用了 cert-manager 產生 Private CA,並且安裝 MetalLB 讓 Kubernetes Cluster Service 可以被外部流量訪問,現在來試試看透過 Private CA 簽一個 Wildcard 憑證,並且安裝 Envoy Gateway 設定 SSL Termination,讓外部連線到 Jenkins 的流量可以被加密。 Kubernetes 中安裝 cert-manager 並產生 Private CA Kubernetes 外部存取:MetalLB 裸機安裝與連線測試 Jenkins:安裝 Jenkins 在 Kubernetes 安裝 Envoy Gateway 安裝: helm install eg oci://docker.io/envoyproxy/gateway-helm --version v1.6.1 -n envoy-gateway-system --create-namespace 確認服務處於有效狀態: kubectl wait --timeout=5m -n envoy-gateway-system deployment/envoy-gateway --for=condition=Available 安裝 GatewayClass、Gateway 首先建立一個 namespace 名為 gateway Wildcard Certificate 使用先前產生的 Cluster Issuer my-ca-issuer 去簽,並且放到 gateway namespace Gateway 設定 Wildcard Certificate 並且允許所有 namespace 都可以在其掛 Routes,此 Obejct 同樣放到 gateway namespace 使用指令 kubectl get gateway -n gateway eg,查看 Gateway 取得的 External IP 是多少 apiVersion: v1 kind: Namespace metadata: name: gateway --- apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: wildcard-k8s-wcya-test namespace: gateway spec: secretName: wildcard-k8s-wcya-test-tls issuerRef: name: my-ca-issuer kind: ClusterIssuer commonName: "*.k8s.wcya.test" dnsNames: - "*.k8s.wcya.test" --- apiVersion: gateway.networking.k8s.io/v1 kind: GatewayClass metadata: name: eg spec: controllerName: gateway.envoyproxy.io/gatewayclass-controller --- apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: eg namespace: gateway spec: gatewayClassName: eg listeners: - name: https protocol: HTTPS port: 443 tls: mode: Terminate certificateRefs: - kind: Secret group: "" name: wildcard-k8s-wcya-test-tls allowedRoutes: namespaces: from: All 安裝 HTTPRoute 為 Jenkins Service 建立 HTTPRoute,並且 Gateway 設定剛剛建立的 eg ...