---
title: 'Использовать PROXY-протокол в кластере Managed Kubernetes для Ingress Controller Traefik'
sidebar_label: 'Использовать PROXY-протокол'
sidebar_position: 3
description: 'Как настроить Ingress Controller Traefik для работы PROXY-протокола в кластерах Managed Kubernetes'
---

import Formbricks from '@theme/MDXComponents/Formbricks'

# Использовать PROXY-протокол в кластере Managed Kubernetes для Ingress Controller Traefik

Настроить использование PROXY-протокола можно в существующем балансировщике.

Если вы подключаетесь к поду через балансировщик c правилом TCP → PROXY, в логах пода будет указан реальный IP-адрес подключающегося, а не адрес балансировщика.

1. Убедитесь, что версия кластера Managed Kubernetes 1.21.10 или выше:

   ```bash
   kubectl version
   ```

   Вы можете [обновить версию кластера](/managed-kubernetes/clusters/upgrade-version.mdx).

2. [Подключитесь к кластеру](/managed-kubernetes/clusters/connect-to-cluster.mdx).

3. Получите значения Ingress Controller Traefik и сохраните их в файл `values.yaml`:

   ```bash
   helm inspect values traefik/traefik > values.yaml
   ```

4. В файл `values.yaml` внесите изменения:

   4.1. В блок `annotations` добавьте `loadbalancer.openstack.org/proxy-protocol: "true"`.

   4.2. Опционально: чтобы разрешить подключение без TLS-сертификата, в блок `proxyProtocol` добавьте `insecure: true`.

   4.3. Сохраните изменения.

5. Обновите Ingress Controller Traefik:

   ```bash
   helm upgrade traefik traefik/traefik --values values.yaml
   ```

6. Создайте тестовый объект Deployment echo-сервера. Например:

   ```yaml
   cat <<EOF | kubectl apply -f -
   apiVersion: apps/v1
   kind: Deployment
   metadata:
       name: echoserver
       namespace: default
       labels:
       app: echoserver
   spec:
       replicas: 1
       selector:
       matchLabels:
           app: echoserver
       template:
       metadata:
           labels:
           app: echoserver
       spec:
           containers:
           - name: echoserver
           image: gcr.io/google-containers/echoserver:1.10
           imagePullPolicy: IfNotPresent
           ports:
               - containerPort: 8080
   EOF
   ```

7. Создайте объект Service типа ClusterIP для echo-сервера:

   ```bash
   kubectl expose deployment echoserver --type=ClusterIP --target-port=8080
   ```

8. Создайте объект Ingress для echo-сервера. Например:

   ```yaml
   cat <<EOF | kubectl apply -f -
   apiVersion: networking.k8s.io/v1
   kind: Ingress
   metadata:
       name: test-proxy-protocol
       namespace: default
       annotations:
       traefik.ingress.kubernetes.io/router.entrypoints: web
   spec:
       ingressClassName: "traefik"
       rules:
       - host: test.com
           http:
           paths:
           - path: /ping
               pathType: Exact
               backend:
                   service:
                       name: echoserver
                       port:
                           number: 8080
   EOF
   ```

9. Проверьте объект Ingress:

   ```bash
   kubectl get ing
   ```

   В ответе появится информация об объекте Ingress. IP-адрес может появиться не сразу. Например:

   ```bash
   NAME                  CLASS     HOSTS      ADDRESS           PORTS   AGE
   test-proxy-protocol   traefik   test.com   123.123.123.123   80      5s
   ```

   Скопируйте IP-адрес объекта Ingress.

10. Проверьте соединение:

    ```bash
    ip=<ip_address>
    curl -sH 'Host: test.com' http://$ip/ping | sed '/^\s*$/d'
    ```

    Укажите `<ip_address>` — IP-адрес объекта Ingress, который вы скопировали на шаге 9. Если вы используете версию кластера Managed Kubernetes 1.31 или ниже, добавьте к адресу суффикс `nip.io`, например `123.123.123.123.nip.io`.

    В ответе появится информация о соединении. Например:

    ```bash
    Hostname: echoserver-78d689cddd-5bmnk
    Pod Information:
        -no pod information available-
    Server values:
        server_version=nginx: 1.13.3 - lua: 10008
    Request Information:
        client_address=10.10.246.7
        method=GET
        real path=/ping
        query=
        request_version=1.1
        request_scheme=http
        request_uri=http://test.com:8080/ping
    Request Headers:
        accept=*/*
        accept-encoding=gzip
        host=test.com
        user-agent=curl/8.7.1
        x-forwarded-for=<xxx>
        x-forwarded-host=test.com
        x-forwarded-port=80
        x-forwarded-proto=http
        x-forwarded-server=traefik-54dc77dc47-zd8px
        x-real-ip=<xxx>
    Request Body:
        -no body in request-
    ```

<Formbricks />
