google-kubernetes-engine - 带 GKE 运行状况检查和 LB 配置错误的大使边缘堆栈
问题描述
我目前正在安装 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 规范映射到我需要的各个服务,没有任何问题。
在这一点上,我已经做了几天并寻求帮助。
解决方案
根据 google 文档,如果您希望负载均衡器终止 SSL 流量,则需要对其进行配置。您可以使用以下说明:https ://kubernetes.io/docs/concepts/services-networking/ingress/#tls
这些链接到谷歌在原始文档中关于如何创建 L7 负载均衡器的链接,链接在大使文档中:https ://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer (链接来自步骤您链接的本网站的 1 个:https ://www.getambassador.io/docs/edge-stack/latest/topics/running/ambassador-with-gke/ )
不幸的是,这意味着当您同时指定大使Mapping
和Host
. 在我从头开始安装 AES 的 GKE 集群上,有一个自动创建谷歌负载均衡器Service
的类型LoadBalancer
(如果你在 GKE 中)。此服务自动为 443 和 80 配置端口,不需要额外的入口。
推荐阅读
- macos - 如何在终端中使用代理?
- c# - HttpClient Polly WaitAndRetry 策略
- python - 为什么我的输入函数打印的是 else 语句而不是我定义的字符串?
- apache-spark - Spark FileAlreadyExistsException 在写入 JSON 文件时出现阶段失败
- angular - 令牌未以角度 WWW-Authenticate: Bearer 发送到服务器并得到 401 错误
- javascript - 使用 webkitRelativePath 时,路径分隔符是操作系统特定的吗?
- oauth-2.0 - 在 SPA 应用程序中保护没有 OAuth2 客户端凭据流的 Api 调用
- jquery - 在 jquery 中更改字体系列
- gnuplot - Gnuplot中的动态彩色条形图?
- r - R在对象上重复功能