Ambassador Edge Stack w/GKE运行状况检查和LB设置错误



我目前正在安装Ambassador Edge Stack(AES(,以帮助管理GKE集群中运行应用程序的几个应用程序,但我遇到了一些问题。

手册安装指南中的步骤似乎运行良好,除了edgectl被弃用而支持telepresence之外(我还没有真正尝试过(。

接下来的步骤,通过GKE设置入口是问题的开始。

根据指南,这可以通过传统的大使API网关或新的AES来完成。对这两种安装进行比较,除了将原始aesambassador服务和ambassador-admin服务从LoadBalancer类型打补丁到NodePort类型之外,您不需要在API网关安装中执行任何操作。我用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

剩下的都是关于设置GKEIngressBackendConfig。我的是这样的:

# 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

这就是事情开始分崩离析的地方。ambassadorambassador-admin服务和pod运行良好。Ingress创建了一个HTTPLB,分配了我保留的全局ip地址,并且a未能从后端健康检查中获得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规范映射到我需要的各个服务之外,这个ingress+后端+前端配置与我过去的配置没有什么不同,没有任何问题。

在这一点上,我已经做了几天了,并寻求一些帮助。

根据谷歌文档,如果您希望负载均衡器终止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/)

不幸的是,这意味着当您同时指定大使MappingHost时,您将无法充分利用大使的letsencrypt自动证书生成功能。在我从头开始安装AES的GKE集群上,有一个LoadBalancer类型的Service,它会自动创建一个谷歌负载均衡器(如果你在GKE中(。该服务具有为443和80自动配置的端口,不需要额外的入口。

相关内容

  • 没有找到相关文章

最新更新