API 版本控制策略的 4 个最佳实践
使用 Kubernetes Gateway API 的多集群网关
在本文中,了解如何使用网关 API 规范来配置多集群设置的网关。
Kubernetes Gateway API 是 CNCF 发布的一项新规范,旨在标准化 Kubernetes Ingress 流量。现在,如果将服务配置为高可用性 (HA),该怎么办?(假设它位于不同的云环境中,您必须从网关访问它;即多集群、多云场景。)在本文中,我们将展示如何使用 Gateway API 规范为多集群设置配置网关。
多集群 Kubernetes 网关演示概述
我们有两个集群:一个在 EKS 中(主集群),另一个在 GKE 中(远程集群)。我在两个集群中都部署了 Istio,设置是主-远程 Istio 安装。Istio 用作控制器来实现网关 API 资源。
以下是我要做的事情:
- 在主集群/EKS中,部署
helloworld-v1
部署、helloworld
服务和echoserver
服务。 - 在远程集群/GKE 中,部署
helloworld-v2
部署、helloworld
服务、echoserver
部署和echoserver
服务。 - 在主集群中部署 Kubernetes Gateway API 资源 —
Gateway
和HTTPRoutes
— 。 - 部署完成后,我们将验证主集群/EKS 中的网关是否可以访问远程集群/GKE 中的服务,如下图所示:
带有 K8s Gateway API 演示设置的多集群、多云网关
在集群中部署应用程序和服务
在主集群和远程集群上部署helloworld-service :
kubectl -f 应用 helloworld-service.yaml --context=eks-cluster
kubectl -f 应用 helloworld-service.yaml --context=gke-cluster
1
将helloworld-deployment-v1 部署到主集群/EKS,将helloworld-deployment-v2 部署到远程集群/GKE:
kubectl -f 应用 helloworld-deployment-v1.yaml --context=eks-cluster
kubectl -f 应用 helloworld-deployment-v2.yaml --context=gke-cluster
在两个集群中 部署echoserver-service ,并仅在远程集群中 部署 echoserver-deployment :
kubectl -f 应用 echoserver-service.yaml --context=eks-cluster
kubectl -f 应用 echoserver-service.yaml --context=gke-cluster
kubectl -f 应用 echoserver-deployment.yaml --context=gke-cluster
请注意,要实现此功能,需要在两个集群中部署服务资源。这就是为什么我将其部署echoserver-service
在主集群/EKS 中,尽管部署仅在远程集群/GKE 中。
现在,让我们验证主集群和辅助集群中的部署:
kubectl 获取 svc -n demo --context=eks-cluster
kubectl 获取 pods -n demo --context=eks-cluster
kubectl 获取 svc -n demo --context=gke-cluster
kubectl 获取 pods -n demo --context=gke-cluster
主集群中有helloworld-v1
pod 正在运行,而远程集群中有helloworld-v2
和echoserver
pod 均成功运行:
部署 K8s Gateway API 资源并验证多集群通信
在主/EKS集群中应用网关资源:
kubectl apply -f gateway-api-gateway.yaml --context=eks-cluster
Gateway使用Istio作为控制器,部署在istio-ingress
命名空间中。
在应用程序的主集群中部署HTTPRoutehelloworld
,监听路径/hello:
kubectl apply -f helloworld-httproute.yaml --context=eks-cluster
现在,让我们通过 curlhelloworld
应用程序来验证多集群通信;但首先,我们需要获取网关 IP:
kubectl 获取 svc -n istio-ingress --context=eks-cluster
验证多集群通信:
curl yours ip/hello
您可以看到该请求分别由部署在主集群和辅集群中的helloworld-v1
和提供服务。helloworld-v2
现在,让我们在主集群中部署echoserver 的 HTTPRoute,它监听/ :
kubectl apply -f echoserver-httproute.yaml --context=eks-cluster
验证网关是否能够访问echoserver
部署在远程集群:
网关能够echoserver
成功从部署在远程集群的服务器收到响应。演示到此结束。
原文链接:https://dzone.com/articles/multicluster-gateways-with-kubernetes-gateway-api