обратный прокси-сервер nginx для служб за сервисной сеткой istio

#nginx #openshift #istio

#nginx #openshift #istio

Вопрос:

я пытаюсь балансировать нагрузку с помощью nginx для служб, находящихся за сервисной сеткой istio, развернутой на openshift.

мой запрос находится в nginx.conf, какие IP-адреса я должен использовать в случае развертывания istio? при развертывании, отличном от istio, я использовал IP-адрес узла модуля и порт узла сервиса.

 upstream infra{
    server XXX.XXX.XXX.XXX:8080;
}

map $proxy_add_x_forwarded_for $client_ip {"~(?<IP>([0-9]{1,3}.){3}[0-9]{1,3}),.*" $IP;}

server {
        listen       80;
        server_name example.com;
        access_log  /var/log/nginx/nginx.testmegh.access.log main;
        error_log  /var/log/nginx/nginx.testmegh.error.log error;
        location /fininfra {
          proxy_pass         http://infra:80;
          proxy_http_version 1.1;
          proxy_redirect     off;
          proxy_set_header   Host $host;
          proxy_set_header   X-Real-IP $remote_addr;
          proxy_set_header   X-Forwarded-Host $host;
          proxy_set_header   X-Forwarded-For $remote_addr;
        } 
}
  

Ответ №1:

Все в istio проходит через istio-ingressgateway external-IP, так что это зависит от того, как вы настроили свой кластер istio. Это может быть либо LoadBalancer, либо NodePort.

Цитируется из документации

Определение IP-адреса входа и портов

Выполните следующую команду, чтобы определить, запущен ли ваш кластер Kubernetes в среде, поддерживающей внешние средства балансировки нагрузки:

 $ kubectl get svc istio-ingressgateway -n istio-system
NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)   AGE
istio-ingressgateway   LoadBalancer   172.21.109.129   130.211.10.121   ...       17h
  

Если задано значение EXTERNAL-IP, в вашей среде есть внешний балансировщик нагрузки, который вы можете использовать для входного шлюза. Если значение EXTERNAL-IP равно (или постоянно), ваша среда не предоставляет внешний балансировщик нагрузки для входного шлюза. В этом случае вы можете получить доступ к шлюзу, используя порт узла службы.


какие IP-адреса я должен использовать в случае развертывания istio

В приведенном выше примере из документации это 130.211.10.121 .

Допустим, вы развернули приложение Bookinfo и хотите получить к нему доступ через браузер, вам придется использовать указанный выше IP и соответствующий uri из виртуального сервиса. Так и было бы 130.211.10.121/productpage .