Правильный способ разоблачения traefik, работающего в локальном кластере kubernetes?
У меня есть локальный кластер Kubernetes. У меня есть traefik, работающий в кластере согласно примеру, приведенному traefik. Это связано с узлом, который будет моим loadbalancer. Я могу получить доступ к службе, работающей (с входом), нажав на порт узла с маршрутом. Например, http://build.mydomain.com:NODEPORT направит меня к Дженкинсу.
Но я хочу иметь возможность поразить мой Дженкинс, просто зайдя на сайт http://build.mydomain.com/
Это возможно, или я должен запустить traefik за пределами кластера?
По сути, я просто хочу, чтобы все попадания 80 на балансировщике нагрузки попадали на входной контроллер traefik, который должен маршрутизировать запрос на основе входных данных.
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: traefik-ingress-controller
namespace: kube-system
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: traefik-ingress-controller
namespace: kube-system
labels:
k8s-app: traefik-ingress-lb
spec:
replicas: 1
selector:
matchLabels:
k8s-app: traefik-ingress-lb
template:
metadata:
labels:
k8s-app: traefik-ingress-lb
name: traefik-ingress-lb
spec:
serviceAccountName: traefik-ingress-controller
terminationGracePeriodSeconds: 60
containers:
- image: traefik
name: traefik-ingress-lb
ports:
- name: http
containerPort: 80
- name: admin
containerPort: 8080
args:
- --api
- --kubernetes
- --logLevel=INFO
nodeSelector:
node-role.kubernetes.io/worker: loadbalancer
---
kind: Service
apiVersion: v1
metadata:
name: traefik-ingress-service
namespace: kube-system
spec:
selector:
k8s-app: traefik-ingress-lb
ports:
- protocol: TCP
port: 80
name: web
- protocol: TCP
port: 8080
name: admin
type: NodePort
1 ответ
Если вы развернете traefik внутри кластера, то он может быть открыт только как сервис с NodePort/LoadBalancer или Ingress. Если это Ingress, угадайте, какой вам нужен балансировщик нагрузки вне кластера.
Я просто хотел, чтобы простой обратный прокси-сервер обнаруживал и направлял трафик на новые сервисы. Это хорошо сработало, запустив traefik вне кластера и настроив api-сервер kubernetes на главном узле. Это делается в конфигурационном файле Traefik. Как это:
[kubernetes]
endpoint = "https://my-master-node:6443"
token="" <-- GET THIS FROM YOUR KUBERNETES MASTER NODE
certAuthFilePath = "/root/ssl/ca.crt" <-- GET THIS FROM YOUR KUBERNETES MASTER NODE
Тогда он подобрал вход и направил бы к надлежащему обслуживанию.
Одним из сервисов, которые я настраивал в своем кластере, был Jenkins. Дженкинс ожидает, что его агенты будут подключаться к порту 50000 по умолчанию. Я потратил некоторое время, пытаясь выяснить, как получить маршрут на основе того же хоста для подключения к другому порту в кластере. Не могу заставить его работать.
Тогда я узнал, что trafik не поддерживает TCP. Агенты Jenkins связываются с мастером по протоколу http, чтобы поздороваться, а затем устанавливают соединение агента с подчиненным через TCP.
Так что в итоге потраченные впустую усилия:-(