Можно ли обслуживать приложения через узел контроллера Kubernetes? - PullRequest
1 голос
/ 26 января 2020

Я построил кластер K3s (https://k3s.io) на наборе компьютеров Raspberry Pi4.

Узел контроллера (ctrl-1) является шлюзом в том смысле, что он имеет 2 сетевые интерфейсы. Один подключен к моей локальной сети, а другой подключен к создаваемой сети, например, K3S-LAN. Два узла (node-1 и node-2) развернуты в K3S-LAN.

Я хочу иметь возможность доступа к приложениям, работающим на узлах, через ctrl-1, например, из локальной сети. Это связано с тем, что этот кластер должен быть переносимым, поэтому к гостевой локальной сети необходимо подключить только узел ctrl-1. (Да, есть проблемы с DNS-именами и т. Д. c, которые необходимо разобрать, но я хочу, чтобы основы были запущены первыми).

Это означает, что мне нужно иметь возможность "прокси" проникновения через ctrl-1. Я думал, что у меня была правильная идея для этого, потому что я развернул "nginx -ingress" на мастере, используя Helm. Однако я забыл об услуге для этого - это было запланировано на узлах, тогда как это должно быть на контроллере, чтобы порты были открыты (я думаю). Однако я не могу найти способ запустить службу на контроллере.

В данный момент у меня запущена служба с типом NodePort. Я мог бы установить MetalLB, чтобы у меня были возможности LoadBalancer. Однако с тем, что я видел, я не уверен, поможет ли это или нет.

ctrl-1 не имеет никаких настроек, только роль мастера.

Я лаю здесь не то дерево? Я думаю, что это может быть не тот случай использования Kubernetes, но я играю с идеей. Спасибо за любые идеи, которые есть у людей.

Обновление *

Я только что подумал, что можно обойти это, запустив HAProxy на ctrl-1 (как другой сервис на хосте) и настройте правила для прокси на необходимые сервисы в кластере. Это будет действовать как мост между сетями.

1 Ответ

1 голос
/ 26 января 2020
  1. Вам просто нужно выставить свой модуль через службу типа Nodeport, и к нему можно получить доступ через http://master-node-ip: nodeport . Убедитесь, что kube-proxy работает на всех основных и рабочих узлах.

  2. Входной подход также должен работать, если на вашем ведущем компьютере запущен kube-proxy. Вы развертываете вход nginx на своем кластере, и он будет развернут на рабочем узле. Затем вы можете выставить nginx сам входной контроллер, используя сервис NodePort. После этого вы можете создать входной ресурс для настройки входного контроллера nginx для маршрутизации трафика c на ваши серверные модули и службы, работающие на рабочих узлах. Службы для внутренних модулей должны быть типа ClusterIP.

Развернуть входной контроллер nginx и предоставить его через службу NodePort, используя kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.27.1/deploy/static/provider/baremetal/service-nodeport.yaml

Развернуть nginx модуль (nginx является примером .. это должен быть ваш модуль) kubectl run nginx --generator=run-pod/v1 --image=nginx

Предоставлять nginx модуль через службу ClusterIP

apiVersion: v1
kind: Service
metadata:
  labels:
    run: nginx
  name: nginx-service
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx

Создать входной ресурс

apiVersion: extensions/v1beta1
kind: Ingress
metadata: 
  name: mycha-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - http:
      paths:
        - path: /
          backend:
            serviceName: nginx-service
            servicePort: 80

При вышеуказанной настройке я могу получить доступ к nginx и получить «Welcome to nginx!» Через http://master-node-ip:NodePort of nginx ingress controller

...