【问题标题】:Health check problem with setting up GKE with istio-gateway使用 istio-gateway 设置 GKE 的健康检查问题
【发布时间】:2020-08-31 20:20:56
【问题描述】:

目标

我正在尝试设置一个

Cloud LB -> GKE [istio-gateway -> my-service]

这之前可以工作,但是,我必须在 2 天前重新创建集群并遇到此问题。也许有一些版本变化?

这是我的入口清单文件

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: "my-dev-ingress"
  namespace: "istio-system"
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "my-dev-gclb-ip"
    ingress.gcp.kubernetes.io/pre-shared-cert: "my-dev-cluster-cert-05"
    kubernetes.io/ingress.allow-http: "false"
spec:
  backend:
    serviceName: "istio-ingressgateway"
    servicePort: 80

问题

Cloud LB 的健康检查问题失败。 Ingress 创建的后端服务会创建 /:80 默认健康检查。

我尝试过的

1) 我尝试将 gke 入口生成的健康检查设置为指向后端配置控制台中的 istio-gateway StatusPort 端口 15020。然后健康检查通过了一段时间,直到后端配置恢复为使用它创建的原始 /:80 健康检查。我什至试图删除它创建的健康检查,然后它只是创建另一个。

2) 我还尝试使用 istio-virtual 服务将运行状况检查路由到 15020 端口,如 here 所示,但没有取得多大成功。

3) 我也尝试将虚拟服务中的所有内容路由到运行状况检查端口

  hosts:
    - "*"
  gateways:
    - my-web-gateway
  http:
    - match:
        - method:
            exact: GET
          uri:
            exact: /
      route:
        - destination:
            host: istio-ingress.gke-system.svc.cluster.local
            port:
              number: 15020

4) 我发现的大多数搜索结果都说在部署中设置readinessProbe 应该告诉入口设置正确的健康检查。但是,我所有的服务都在 istio-gateway 下,我真的不能这样做。

我现在非常迷茫,如果有人能指出我正确的方向,我将不胜感激。谢谢

【问题讨论】:

  • 您好,istio 和 gke 版本是什么?是开源 istio 还是 gke 插件?您是重做整个 gke cluter 还是使用了现有元素?如果可能的话,以前版本的 istio 也会有所帮助。
  • 感谢您的回复。 GKE 是 1.14.10-gke.36。很抱歉,我找不到有关 Istio 版本的信息,我将继续寻找。我尝试修复当前集群并创建了一个启用了 istio 选项的全新集群(我假设它是 gke 插件)并且两者都有相同的结果。我会看看我是否可以将 gke 集群恢复到以前版本的 istio 谢谢
  • 您解决了这个问题了吗? GKE 应根据您的 yaml 文件添加运行状况检查。检查是否可能在 LB 上存在多个可能导致问题的运行状况检查/后端。
  • 您好,感谢您的信息,我们还没有解决问题,我们直接在 istio 内的网络应用程序上进行健康检查,这不是主意,但这是我们现在唯一的解决方法。正如您所说,我确实检查了是否有多个健康检查,但找不到任何其他检查。

标签: google-cloud-platform google-kubernetes-engine istio


【解决方案1】:

我让它与 gke 1.20.4-gke.2200 和 istio 1.9.2 一起工作,这方面的文档不存在或者我没有找到任何东西,你必须向 istio-ingressgateway 服务添加注释才能使用使用“istioctl install -f values.yaml”命令时的后端配置

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    ingressGateways:
      - name: istio-ingressgateway
        enabled: true
        k8s:
          serviceAnnotations:
            cloud.google.com/backend-config: '{"default": "istio-ingressgateway-config"}'

那么您必须使用正确的运行状况检查端口创建后端配置

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: istio-ingressgateway-config
  namespace: istio-system
spec:
  healthCheck:
    checkIntervalSec: 30
    port: 15021
    type: HTTP
    requestPath: /healthz/ready

有了这个,入口应该自动更改负载均衡器健康检查的配置,指向 istio 端口 80

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web
  namespace: istio-system
  annotations:
    kubernetes.io/ingress.global-static-ip-name: web
    networking.gke.io/managed-certificates: "web"
spec:
  rules:
    - host: test.example.com
      http:
        paths:
          - path: "/*"
            pathType: Prefix
            backend:
              service:
                name: istio-ingressgateway
                port:
                  number: 80
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: direct-web
  namespace: istio-system
spec:
  hosts:
    - test.example.com
  gateways:
    - web
  http:
    - match:
        - uri:
            prefix: "/"
      route:
        - destination:
            port:
              number: 8080 #internal service port
            host: "internal-service.service-namespace.svc.cluster.local"

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: web
  namespace: istio-system
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - test.example.com
      

您还可以在虚拟服务和网关中将主机设置为“*”

【讨论】:

    猜你喜欢
    • 2020-06-25
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2019-07-28
    • 2018-06-03
    • 2019-05-11
    • 2016-10-13
    相关资源
    最近更新 更多