我目前正在安装 Ambassador Edge Stack (AES),以帮助管理在我们的 GKE 集群中运行应用程序的多个应用程序,但我遇到了几个问题。
手动安装指南中的步骤似乎工作正常,除了edgectl
被弃用telepresence
(我还没有真正尝试过)。
接下来的步骤,使用 GKE 设置入口是问题开始的地方。
根据指南,这可以通过传统的 Ambassador API 网关或新的 AES 来完成。对两种安装进行比较,您不需要在 API Gateway 安装中执行任何操作,除了整理修补原始aesambassador
服务和ambassador-admin
服务 from LoadBalancer
toNodePort
类型。我已经做到了kustomize
# prod/ambassador-service-patches.yaml
---
apiVersion: v1
kind: Service
metadata:
name: ambassador
namespace: ambassador
annotations:
cloud.google.com/backend-config: '{"ports": {"8080": "my-backend"}}'
spec:
# loadBalancerIP: 35.244.139.65
type: NodePort # needed for GKE ingress LB
ports:
- name: backend
port: 8080
targetPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: ambassador-admin
namespace: ambassador
spec:
type: NodePort # needed for GKE ingress backend health check
ports:
- name: backend
port: 8877
targetPort: 8877
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: ambassador
namespace: ambassador
spec:
replicas: 3
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: ambassador-agent
namespace: ambassador
spec:
replicas: 3
剩下的就是设置 GKEIngress
和BackendConfig
. 我的看起来像这样:
# prod/ingress.yaml
---
apiVersion: networking.gke.io/v1
kind: ManagedCertificate
metadata:
name: my-cluster-ssl
spec:
domains:
- www.mydomain.com
---
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
name: my-backend
namespace: ambassador
spec:
timeoutSec: 30
connectionDraining:
drainingTimeoutSec: 30
healthCheck:
checkIntervalSec: 10
timeoutSec: 10
healthyThreshold: 2
unhealthyThreshold: 2
type: HTTP
requestPath: /ambassador/v0/check_ready
port: 8877
logging:
enable: true
sampleRate: 1.0
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
namespace: ambassador
annotations:
kubernetes.io/ingress.global-static-ip-name: "my-global-ip"
networking.gke.io/managed-certificates: "my-cluster-ssl"
kubernetes.io/ingress.class: "gce"
spec:
backend:
serviceName: ambassador
servicePort: 8080
这就是事情开始分崩离析的地方。和服务ambassador
和ambassador-admin
pod 运行良好。Ingress
创建一个分配我保留的全局 IP 地址的HTTP
LB,并且无法从后端运行状况检查中获得 OK。我相信因为 LB 是 HTTP 并且没有暴露端口 443,所以ManagedCertificate
也无法提供NOT_VISIBLE
错误。
进行一些故障排除,我现在添加了 aFrontEndConfig
并使用注释添加到我的入口networking.gke.io/v1beta1.FrontendConfig: "my-frontend"
以设置 HTTP 重定向 LB,但是这个新的仅重定向 LB 被分配了具有This load balancer has no frontend configured
. 下面是FrontendConfig
.
apiVersion: networking.gke.io/v1beta1
kind: FrontendConfig
metadata:
name: my-frontend
namespace: ambassador
spec:
redirectToHttps:
enabled: true
我也玩过一个kubernetes.io/ingress.allow-http: "false"
没有运气的人。这个 ingress+backend+frontend 配置与我以前的配置没有什么不同,除了 Ingress 规范映射到我需要的各个服务,没有任何问题。
在这一点上,我已经做了几天并寻求帮助。