【发布时间】:2021-06-29 13:07:40
【问题描述】:
我目前正在安装 Ambassador Edge Stack (AES),以帮助管理在我们的 GKE 集群中运行应用程序的多个应用程序,但我遇到了几个问题。
the manual install guide 中的步骤似乎运行良好,除了 edgectl 被弃用以支持 telepresence(我还没有真正尝试过)。
接下来的步骤,setting up the ingress with GKE 是问题开始的地方。
根据指南,这可以通过旧版 Ambassador API 网关或新 AES 来完成。对两种安装进行比较,您无需在 API Gateway 安装中执行任何操作,只需整理出修补 the original aes ambassador 服务和从 LoadBalancer 到 NodePort 类型的 ambassador-admin 服务。我已经用 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
剩下的就是设置 GKE Ingress 和 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 创建了一个 HTTP LB,分配了我保留的全局 IP 地址,但无法从后端运行状况检查中获得 OK。我相信因为 LB 是 HTTP 并且没有暴露端口 443,ManagedCertificate 也无法提供 NOT_VISIBLE 错误。
进行一些故障排除我现在添加了一个 FrontEndConfig 并使用注释 networking.gke.io/v1beta1.FrontendConfig: "my-frontend" 添加到我的入口以设置 HTTP 重定向 LB,但是这个新的仅重定向 LB 被分配了全局静态 IP 地址(不是 HTTPS 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 规范映射到我需要的各个服务,没有任何问题。
在这一点上,我已经做了几天并寻求帮助。
【问题讨论】:
标签: google-kubernetes-engine kubernetes-ingress ambassador