kubernetes выставляет сервисы с Traefik 2.x как вход с CRD - PullRequest
0 голосов
/ 06 января 2020

Что у меня работает

У меня есть кластер Kubernetes следующим образом:

  • Одиночная плоскость управления (но планируется расширить до 3 плоскостей управления для HA)
  • 2 рабочих узла



В этом кластере я развернул (после этого выполните c из traefik https://docs.traefik.io/user-guides/crd-acme/):

  • Развертывание, которое создает два модуля:

    • сам traefik: который будет отвечать за маршрутизацию с незащищенным портом 80, 8080
    • whoami: простой http сервер, который отвечает на запросы http
  • две службы

    • служба traefik:
    • whoami servi c:
  • Один трафик IngressRoute:

Чего я хочу

У меня в кластере запущено несколько служб, и я хочу открыть их извне с помощью Ingress. Точнее, я хочу использовать новые методы доступа Traefik 2.x CDR.

Моя конечная цель - использовать новые CRD traefiks 2.x для предоставления ресурсов через порт 80, 443, 8080. использование IngressRoute пользовательских определений ресурсов

В чем проблема

Если я правильно понимаю, контроллеры classi c Ingress позволяют выставлять любые порты, которые мы хотим, для внешнего мира (включая 80, 8080 и 443).

Но с помощью нового подхода к входу traefik CDR он ничего не экспортирует вообще. Одним из решений является определение службы Traefik как службы с балансировкой нагрузки, а затем предоставление некоторых портов. Но вы вынуждены использовать диапазон портов 30000-32767 (такой же, как и у нодпорта), и я не хочу добавлять обратный прокси перед обратным прокси, чтобы иметь возможность выставить порты 80 и 443 ...

Также я получил от c нового CRD igress (https://docs.traefik.io/user-guides/crd-acme/), который:

kubectl port-forward --address 0.0.0.0 service/traefik 8000:8000 8080:8080 443:4443 -n default

требуется, и я понимаю это сейчас. Вам необходимо сопоставить порт хоста с сервисным портом. Но отображение портов таким способом кажется неуклюжим и противоречит интуитивно понятным. Я не хочу иметь часть описания сервиса в yaml и в то же время должен помнить, что мне нужно сопоставить порт с kubectl.

Я почти уверен, что есть аккуратный и простое решение этой проблемы, но я не могу понять, как все сделать просто. Ребята, у вас есть опыт работы в kubernetes с новой конфигурацией traefik 2.x CRD?

Ответы [ 2 ]

0 голосов
/ 10 января 2020

Вы можете попробовать использовать тип службы LoadBalancer для предоставления службы Traefik на портах 80, 443 и 8080. Я протестировал yaml по ссылке, которую вы указали в GKE, и она работает.

Вам нужно чтобы изменить порты в сервисе «traefik» и добавить «LoadBalancer» в качестве типа сервиса:

kind: Service
metadata:
  name: traefik
spec:
  ports:
    - protocol: TCP
      name: web
      port: 80 <== Port to receive HTTP connections
    - protocol: TCP
      name: admin
      port: 8080 <== Administration port
    - protocol: TCP
      name: websecure
      port: 443 <== Port to receive HTTPS connections
  selector:
    app: traefik
  type: LoadBalancer <== Define the type load balancer

Kubernetes создаст для вас сервис Loadbalancer, и вы сможете получить доступ к своему приложению, используя порты 80 и 443.

$ curl https://35.111.XXX.XX/tls -k
Hostname: whoami-5df4df6ff5-xwflt
IP: 127.0.0.1
IP: 10.60.1.11
RemoteAddr: 10.60.1.13:55262
GET /tls HTTP/1.1
Host: 35.111.XXX.XX
User-Agent: curl/7.66.0
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 10.60.1.1
X-Forwarded-Host: 35.111.XXX.XX
X-Forwarded-Port: 443
X-Forwarded-Proto: https
X-Forwarded-Server: traefik-66dd84c65c-4c5gp
X-Real-Ip: 10.60.1.1

$ curl http://35.111.XXX.XX/notls   
Hostname: whoami-5df4df6ff5-xwflt
IP: 127.0.0.1
IP: 10.60.1.11
RemoteAddr: 10.60.1.13:55262
GET /notls HTTP/1.1
Host: 35.111.XXX.XX
User-Agent: curl/7.66.0
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 10.60.1.1
X-Forwarded-Host: 35.111.XXX.XX
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: traefik-66dd84c65c-4c5gp
X-Real-Ip: 10.60.1.1
0 голосов
/ 06 января 2020
apiVersion: v1
kind: Service
metadata:
  name: traefik

spec:
  ports:
    - protocol: TCP
      name: web
      port: 80
      targetPort: 8000
    - protocol: TCP
      name: admin
      port: 8080
      targetPort: 8080
    - protocol: TCP
      name: websecure
      port: 443
      targetPort: 4443
  selector:
    app: traefik

вы пытались использовать tragetPort, где каждый запрос приходит с 80 перенаправления на 8000, но когда вы используете переадресацию портов, вам нужно всегда использовать службу вместо pod

...