#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?