Как выбрать контроллер входящего трафика в values.yaml

Контекст

У меня есть кластер k3s (v1.19.3 + k3s3), и я использую "из коробки" traefik ingress controler

kubectl  get svc -n kube-system 
NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
kube-dns             ClusterIP      10.43.0.10      <none>          53/UDP,53/TCP,9153/TCP       5d16h
metrics-server       ClusterIP      10.43.127.152   <none>          443/TCP                      5d16h
traefik-prometheus   ClusterIP      10.43.73.131    <none>          9100/TCP                     5d16h
traefik              LoadBalancer   10.43.121.125   111.11.11.111   80:32492/TCP,443:31586/TCP   5d16h
kubectl   -n kube-system describe svc traefik
Name:                     traefik
Namespace:                kube-system
Labels:                   app=traefik
                          app.kubernetes.io/managed-by=Helm
                          chart=traefik-1.81.0
                          heritage=Helm
                          release=traefik
Annotations:              meta.helm.sh/release-name: traefik
                          meta.helm.sh/release-namespace: kube-system
Selector:                 app=traefik,release=traefik
Type:                     LoadBalancer
IP:                       10.43.121.125
LoadBalancer Ingress:     111.11.11.111
Port:                     http  80/TCP
TargetPort:               http/TCP
NodePort:                 http  32492/TCP
Endpoints:                10.42.0.6:80
Port:                     https  443/TCP
TargetPort:               https/TCP
NodePort:                 https  31586/TCP
Endpoints:                10.42.0.6:443
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

Проблема

Я не могу найти, как использовать этот входной контроллер с помощью диаграммы управления (скажем, это призрачная диаграмма). Насколько я понимаю, как работают диаграммы Helm и какую цель они выполняют, Ingress шаблоны позволяют использовать различные контроллеры входящего трафика. Вот диаграмма ingress.yaml

...
kind: Ingress
metadata:
  name: {{ $fullName }}
  labels:
    {{- include "ghost.labels" . | nindent 4 }}
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: {{ $maxSize }}
  {{- with .Values.ingress.annotations }}
    {{- toYaml . | nindent 4 }}
  {{- end }}
...

Исходя из этого, я бы сказал, что мне нужно отредактировать раздел annotations в values.yaml, чтобы использовать traefik вместо kubernetes.io/ingress.class: nginx по умолчанию.

ingress:
  enabled: true
  annotations: 
    kubernetes.io/ingress.class: traefik  # what should I use?
  hosts:
    - host: some.domain.io
      paths:
        - /
  tls:
    - secretName: chart-example-tls
      hosts:
        - some.domain.io

Однако, что бы я ни пробовал в annotations, helm install продолжаю получать

Error: UPGRADE FAILED: failed to create resource: Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1beta1/ingresses?timeout=10s": service "ingress-nginx-controller-admission" not found

как будто helm, несмотря ни на что, искал контроллер входящего трафика Nginx. Возможно ли это ограничение диаграмм (как эта), или я неправильно понимаю, как работают диаграммы Хельма? Как я могу использовать traefik ingress по умолчанию в развертывании этой диаграммы?


person zar3bski    schedule 25.11.2020    source источник


Ответы (2)


Нет, насколько я знаю - вы не можете выбрать точный контроллер входящего трафика для этой диаграммы. И Nginx, и Traefik используют одни и те же порты, поэтому вам необходимо заранее определить правильный входной контроллер.

Из документации по диаграммам я вижу, что:

Эта диаграмма была протестирована для работы с NGINX Ingress, cert-manager, bla bla

У вас есть следующие варианты управления:  введите описание изображения здесь

Из всего написанного выше у меня есть вопрос | предложение: не хотите ли вы переключиться на контроллер входящего трафика NGINX в K3s?

Подготовка кластера. Прежде всего необходимо, чтобы в кластере не было других входных контроллеров, поскольку это может конфликтовать с вашими текущими входными контроллерами. Это связано с тем, что NGINX и Traefik слушают 80 и 443, что вызывает конфликты друг с другом, поэтому убедитесь, что ваш кластер K3s есть только один вид другого.

Для достижения наилучших результатов ваш кластер K3s должен быть установлен с аргументом --no-deploy-traefik, что приведет к развертыванию кластера K3s только с помощью оркестратора пустых контейнеров без серверной части HTTP по умолчанию, которым является Traefik.

Чтобы убедиться, что у вас не установлен контроллер Traefik, запустите kubectl get deployments -n kube-system и проверьте, исчез ли Traefik.

Если вы убедились, что Traefik отсутствует, переходите к следующей части.

Установка NGINX Есть два способа установить NGINX: либо из диаграммы Helm, либо с помощью прямого kubectl apply -f.

Использование Helm-диаграммы. Вход NGINX доступен в Helm Stable Charts, и если у вас уже установлен стабильный реестр в CLI Helm, просто запустите helm install stable / nginx-ingress.

Вы также можете изменить установку, используя следующие конфигурации, указанные здесь.

person Vit    schedule 25.11.2020
comment
Спасибо за ответ @Vitalii. На самом деле, я перехожу на Nginx прямо сейчас (нет сомнений в том, что это проще). Мой вопрос был скорее академическим (возможно ли?, допускают ли типичные диаграммы эти различия в реализации? должны ли они? и как могли бы они?) - person zar3bski; 27.11.2020

Вы были правы в своем мышлении, например в диаграмме Helm вы должны иметь возможность правильно определять вход по аннотациям.

Например, https://github.com/stefanprodan/podinfo/blob/master/charts/podinfo/templates/ingress.yaml.

который определяет такие аннотации, как:

{{- with .Values.ingress.annotations }}
  annotations:
{{ toYaml . | indent 4 }}

вы можете применить аннотации, специфичные для traefik, например

  annotations:
        traefik.ingress.kubernetes.io/router.entrypoints: websecure
        traefik.ingress.kubernetes.io/router.tls.certresolver: myresolver
        traefik.ingress.kubernetes.io/router.middlewares: kube-system-traefik-forward-auth@kubernetescrd

На диаграмме из вашего вопроса: https://github.com/groundhog2k/helm-charts/blob/master/charts/ghost/templates/ingress.yaml#L16

аннотация

nginx.ingress.kubernetes.io/proxy-body-size

жестко запрограммирован. Это не должно мешать правильной работе развертывания. Вы утверждаете, что похоже, что Helm ищет контроллер входящего трафика Nginx, что не соответствует действительности, afaik. Хельм ничего не ищет. Кроме того, кроме этой конкретной ссылки в аннотациях, я не могу найти ничего жестко запрограммированного в nginx, значения закомментированы. https://github.com/groundhog2k/helm-charts/blob/master/charts/ghost/values.yaml#L60 Итак, правильный ответ заключается в том, что у вас все еще было ошибочное развертывание входящего сервера nginx.

person DarthHTTP    schedule 02.02.2021