Фильтр Envoy lua — недопустимый кластер http-вызовов. Должен быть настроен

#filter #lua #google-kubernetes-engine #istio #envoyproxy

#Фильтр #lua #google-kubernetes-engine #istio #envoyproxy

Вопрос:

Я пытаюсь создать фильтр envoy для всех моих микросервисов, развернутых в кластере GKE, на котором работает istio.

В фильтре я хочу прочитать 2 значения заголовка и отправить запрос во внешнюю службу в Интернете, чтобы получить список всех групп, на которые пользователь имеет полномочия.

Когда я отправляю запрос, я получаю «недопустимый кластер http-вызовов. Должно быть настроено» ошибка.

Насколько я понимаю, нам нужно зарегистрировать хост как кластер, чтобы envoy понимал, куда отправлять запрос, и я добавил значение в раздел «кластеры» моего фильтра.файл yaml.

 apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: authorization-filter
  namespace: default
spec:
  filters:
  - listenerMatch:
      listenerType: SIDECAR_INBOUND
      listenerProtocol: HTTP
    filterName: envoy.lua
    filterType: HTTP
    filterConfig:
      inlineCode: |
        function envoy_on_request(request_handle)
          request_handle:logWarn("Inside filter")
          local token = request_handle:headers():get("Authorization")
          local partition = request_handle:headers():get("partition-id")
          if token == nil or partition == nil then
            request_handle:logErr("Token or Partition is empty")
            request_handle:respond({[":status"] = "400",["Content-Type"] = "application/json"}, "{"ErrorMessage":"Bad Request: Authorization or Partition-Id missing in headers"}")
          end
          request_handle:logWarn("Sending request")
          local headers, body = request_handle:httpCall(
            "lua_cluster",
            {
              [":method"] = "GET",
              [":authority"] = "example.com",
              [":path"] = "/api/authorization/groups",
              ["Authorization"] = token,
              ["partition-id"] = partition
            },
            nil,
            5000)
          request_handle:headers():add("authorization-response-headers", headers)
        end

  clusters:
  - name: lua_cluster
    connect_timeout: 0.5s
    type: strict_dns
    lb_policy: round_robin
    hosts:
    - socket_address:
        address: "example.com"
        port_value: 8888
 

Чего мне здесь не хватает?

Комментарии:

1. Вы ознакомились с примером Istio Envoy здесь, просто чтобы сравнить ваше развертывание с примером? istio.io/v1.4/docs/reference/config/networking/envoy-filter

2. @blueboy1115 да, я последовал примеру, приведенному в документах, но он все равно не работает

3. В соответствии с вашей проблемой, требующей более расширенного устранения неполадок, я рекомендую вам обратиться в службу поддержки Google Cloud, чтобы предоставить им более подробную информацию из вашего проекта здесь console.cloud.google.com/support

4. Вы использовали «- applyTo: CLUSTER», как показано в примерах Istio EnvoyFilter?