【问题标题】:Ambassador Edge Stack w/ GKE Health Check and LB Provisioning Errors带 GKE 运行状况检查和 LB 配置错误的大使边缘堆栈
【发布时间】: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 服务和从 LoadBalancerNodePort 类型的 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 IngressBackendConfig。我的看起来像这样:

# 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 创建了一个 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


    【解决方案1】:

    根据 google 文档,如果您希望负载均衡器终止 SSL 流量,那么您需要对其进行配置。您可以使用以下说明:https://kubernetes.io/docs/concepts/services-networking/ingress/#tls

    这些在原始文档中由 google 链接到有关如何创建 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 集群上,有一个 Service 类型为 LoadBalancer,它会自动创建一个谷歌负载均衡器(如果你在 GKE 中)。该服务的端口自动配置为 443 和 80,不需要额外的入口。

    【讨论】:

    • 您链接的设置 (cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer) 正是我最初在 Ambasasdor 之前进行集群设置的方式。即使使用托管证书,这也能正常工作。我可以使用大使加密功能。我认为这在以前可行,但我没有部署主机和映射清单。
    • 有没有办法给大使服务LB分配一个静态IP?
    • 看起来不像。我最终使用了 Ambassador LB 并使用了自动化的 LetsEncrypt 功能
    • 为了添加上下文,我还必须将命名空间添加到服务中。请参阅stackoverflow.com/questions/55240636/…。我想知道这是否会让 GCP LB 设置正常工作?
    • 生成的 LB IP 在技术上是静态的,直到您删除 LB。我认为没有指定 LB 的 IP 地址的用例。我认为您并没有真正指定您看到的错误/问题,只是存在问题,所以我认为我无法回答您的最后评论。
    猜你喜欢
    • 2021-12-26
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 2022-07-27
    • 2018-10-11
    • 2020-10-13
    相关资源
    最近更新 更多