Правильный способ разоблачения 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.

Так что в итоге потраченные впустую усилия:-(

Другие вопросы по тегам