带 GKE 健康检查和 LB 配置错误的 Ambassador Edge Stack
Ambassador Edge Stack w/ GKE Health Check and LB Provisioning Errors
我目前正在安装 Ambassador Edge Stack (AES) 以帮助管理我们 GKE 集群中的多个应用程序 运行ning 应用程序,但我遇到了几个问题。
the manual install guide 中的步骤似乎工作正常,除了 edgectl
被弃用以支持 telepresence
(我还没有真正尝试过)。
接下来的步骤,setting up the ingress with GKE 是问题开始的地方。
根据指南,这可以通过旧版 Ambassador API 网关或新 AES 来完成。比较这两个安装,除了从 the original aes ambassador
服务和来自LoadBalancer
到 NodePort
类型。我用 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
服务以及 pods 运行 很好。 Ingress
创建了一个 HTTP
LB,并分配了我保留的全局 IP 地址,但无法从后端健康检查中获得 OK。我相信因为 LB 是 HTTP 并且没有公开端口 443,所以 ManagedCertificate
也无法提供 NOT_VISIBLE
错误。
做一些故障排除我现在添加了一个 FrontEndConfig
并使用注释 networking.gke.io/v1beta1.FrontendConfig: "my-frontend"
添加到我的入口以设置 HTTP 重定向 LB 但是这个新的仅重定向 LB 被分配了全局静态具有 This load balancer has no frontend configured
的 IP 地址(不是 HTTPS LB)。下面是 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 文档,如果您希望负载平衡器终止 SSL 流量,则需要对其进行配置。您可以使用以下指令:https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
google 关于如何创建 L7 负载均衡器的原始文档链接到大使文档中的链接:https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer (link comes from Step 1 of this site you linked: https://www.getambassador.io/docs/edge-stack/latest/topics/running/ambassador-with-gke/)
不幸的是,这意味着当您同时指定大使 Mapping
和 Host
时,您将无法充分利用大使的 letsencrypt 自动证书生成。在我从头开始安装 AES 的 GKE 集群上,有一个类型为 LoadBalancer
的 Service
,它会自动创建一个 google 负载均衡器(如果你在 GKE 中)。此服务自动为 443 和 80 配置了端口,不需要额外的入口。
我目前正在安装 Ambassador Edge Stack (AES) 以帮助管理我们 GKE 集群中的多个应用程序 运行ning 应用程序,但我遇到了几个问题。
the manual install guide 中的步骤似乎工作正常,除了 edgectl
被弃用以支持 telepresence
(我还没有真正尝试过)。
接下来的步骤,setting up the ingress with GKE 是问题开始的地方。
根据指南,这可以通过旧版 Ambassador API 网关或新 AES 来完成。比较这两个安装,除了从 the original aes ambassador
服务和来自LoadBalancer
到 NodePort
类型。我用 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
服务以及 pods 运行 很好。 Ingress
创建了一个 HTTP
LB,并分配了我保留的全局 IP 地址,但无法从后端健康检查中获得 OK。我相信因为 LB 是 HTTP 并且没有公开端口 443,所以 ManagedCertificate
也无法提供 NOT_VISIBLE
错误。
做一些故障排除我现在添加了一个 FrontEndConfig
并使用注释 networking.gke.io/v1beta1.FrontendConfig: "my-frontend"
添加到我的入口以设置 HTTP 重定向 LB 但是这个新的仅重定向 LB 被分配了全局静态具有 This load balancer has no frontend configured
的 IP 地址(不是 HTTPS LB)。下面是 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 文档,如果您希望负载平衡器终止 SSL 流量,则需要对其进行配置。您可以使用以下指令:https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
google 关于如何创建 L7 负载均衡器的原始文档链接到大使文档中的链接:https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer (link comes from Step 1 of this site you linked: https://www.getambassador.io/docs/edge-stack/latest/topics/running/ambassador-with-gke/)
不幸的是,这意味着当您同时指定大使 Mapping
和 Host
时,您将无法充分利用大使的 letsencrypt 自动证书生成。在我从头开始安装 AES 的 GKE 集群上,有一个类型为 LoadBalancer
的 Service
,它会自动创建一个 google 负载均衡器(如果你在 GKE 中)。此服务自动为 443 和 80 配置了端口,不需要额外的入口。