Простой вход с хоста с microk8s? - PullRequest
0 голосов
/ 03 февраля 2019

Я хотел бы сделать две вещи с MicroK8s:

  1. Маршрутизировать порты хост-машины (Ubuntu 18.04) 80/443 в Microk8s
  2. Использовать что-то вроде простого входа, определенного в kubernetes.io документы

Моя конечная цель - создать кластер Kubernetes с одним узлом, который находится на хосте Ubuntu, а затем использовать вход для маршрутизации различных доменов в соответствующие им модули внутрисервис.

Я пытался сделать это с Microk8s в течение последних нескольких дней, но не могу обернуть голову вокруг этого.

  • Лучшее, что я получил на данный момент, это использование MetalLB для создания балансировщика нагрузки.Но для этого потребовалось использовать свободный IP-адрес, доступный в моей локальной сети, а не IP-адрес хост-машины.

  • Я также включил default-http-backend и попытался экспортировать и редактироватьэти файлы конфигурации не увенчались успехом.

В качестве примера это будет работать на Minikube после включения входного добавления. В этом примере показан образ базового сервера Nginx на порте 80 наIP-адрес кластера:

    # ingress-service.yaml

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: ingress-service
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      rules:
        # - host: nginx.ioo
        - http:
            paths:
              - path: /
                backend:
                  serviceName: nginx-cluster-ip-service
                  servicePort: 80
    # nginx-deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          component: nginx
      template:
        metadata:
          labels:
            component: nginx
        spec:
          containers:
            - name: nginx
              image: nginx
              ports:
                - containerPort: 80
    # nginx-cluster-ip-service

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-cluster-ip-service
    spec:
      type: ClusterIP
      selector:
        component: nginx
      ports:
        - port: 80
          targetPort: 80

1 Ответ

0 голосов
/ 04 февраля 2019

Если бы я вас правильно понял, есть несколько способов посмотреть на это.

Один из них будет MetalLB , который вы уже упомянули.

MetalLB предоставляет реализацию балансировщика сетевой нагрузки для кластеров Kubernetes, которые не работают на поддерживаемом облачном провайдере, эффективно позволяя использовать службы LoadBalancer в любом кластере.

Вы можете прочитать подробную реализацию Чистое программное решение: MetalLB

Другим способом будет через службу NodePort

Этот подход имеет несколько других ограничений, о которых следует знать:

  • IP-адрес источника

Типы услуг NodePort по умолчанию выполняет преобразование исходного адреса .Это означает, что исходным IP-адресом HTTP-запроса всегда является IP-адрес узла Kubernetes, который получил запрос с точки зрения NGINX.

Вы также можете использовать хост-сеть

В настройках, где нет внешнего балансировщика нагрузки, но использование NodePorts не является опцией, можно настроить ingress-nginx модулей для использования в сетихоста, на котором они работают, вместо выделенного сетевого пространства имен.Преимущество этого подхода заключается в том, что контроллер NGINX Ingress может связывать порты 80 и 443 непосредственно с сетевыми интерфейсами узлов Kubernetes без дополнительной трансляции сети, налагаемой службами NodePort.

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

Надеюсь, это поможет вам определить, какой путь следует реализовать в вашей идее.

...