Metallb can be used in Static (Bare Metal) clusters when you can’t order a load balancer from a cloud provider. Metallb can work in L2 or BGP modes. Below is an example of Metallb usage in L2 mode. | Metallb можно использовать в статических (bare-metal) кластерах, когда вы не можете заказать балансировщик (load balancer) у облачного провайдера. Metallb может работать в L2- или BGP-режиме. |
We will create an Ingress Controller with | Ниже представлен пример использования Metallb в L2-режиме.
Мы создадим Ingress-контроллер с inlet |
First, you have to decide, which NodeGroups will be used to deploy applications that have to be exposed by the LoadBalancer service.
Ingress controllers run on frontend nodes, and Nginx web server runs on a worker node in this example. They have common label | Во-первых, необходимо определить, какие NodeGroup’ы будут использоваться для запуска приложений, к которым будет предоставлен доступ.
В этом примере Ingress-контроллеры запускаются на frontend-узлах, а веб сервер Nginx — на worker-узле. У всех узлов есть общий лейбл |
yaml apiVersion: deckhouse.io/v1 kind: NodeGroup metadata: name: frontend spec: disruptions: approvalMode: Manual nodeTemplate: labels: node-role.deckhouse.io/frontend: “” node-role/metallb: “” taints:
| yaml apiVersion: deckhouse.io/v1 kind: NodeGroup metadata: name: frontend spec: disruptions: approvalMode: Manual nodeTemplate: labels: node-role.deckhouse.io/frontend: “” node-role/metallb: “” taints:
|
Check that nodes have the correct labels. | Проверьте, что на узлах проставлен корректный лейбл. |
bash kubectl get nodes -l node-role/metallb NAME STATUS ROLES AGE VERSION demo-frontend-0 Ready frontend 61d v1.21.14 demo-frontend-1 Ready frontend 61d v1.21.14 demo-worker-0 Ready worker 61d v1.21.14 | bash kubectl get nodes -l node-role/metallb NAME STATUS ROLES AGE VERSION demo-frontend-0 Ready frontend 61d v1.21.14 demo-frontend-1 Ready frontend 61d v1.21.14 demo-worker-0 Ready worker 61d v1.21.14 |
Module | Модуль |
An example of the module configuration: | Пример конфигурации модуля: |
yaml apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: metallb spec: version: 1 enabled: true settings: addressPools:
| yaml apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: metallb spec: version: 1 enabled: true settings: addressPools:
|
Create | Создайте |
yaml apiVersion: deckhouse.io/v1 kind: IngressNginxController metadata: name: main spec: ingressClass: nginx inlet: LoadBalancer nodeSelector: node-role.deckhouse.io/frontend: “” tolerations:
| yaml apiVersion: deckhouse.io/v1 kind: IngressNginxController metadata: name: main spec: ingressClass: nginx inlet: LoadBalancer nodeSelector: node-role.deckhouse.io/frontend: “” tolerations:
|
Check that service with the type | Проверьте, что сервис с типом |
shell kubectl -n d8-ingress-nginx get svc main-load-balancer NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE main-load-balancer LoadBalancer 10.222.255.194 192.168.199.100 80:30236/TCP,443:32292/TCP 30s | shell kubectl -n d8-ingress-nginx get svc main-load-balancer NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE main-load-balancer LoadBalancer 10.222.255.194 192.168.199.100 80:30236/TCP,443:32292/TCP 30s |
Your Ingress controller is accessible on an external IP address. | Ваш Ingress-контроллер доступен по внешнему IP-адресу. |
shell curl -s -o /dev/null -w “%{http_code}” 192.168.199.100 404 | shell curl -s -o /dev/null -w “%{http_code}” 192.168.199.100 404 |
Expose your standalone Nginx web server on | Теперь предоставим доступ к веб-серверу Nginx на порту |
shell kubectl create deploy nginx –image=nginx kubectl create svc loadbalancer nginx –tcp=8080:80 | shell kubectl create deploy nginx –image=nginx kubectl create svc loadbalancer nginx –tcp=8080:80 |
Check service. | Проверьте сервис. |
shell kubectl get svc nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx LoadBalancer 10.222.9.190 192.168.199.101 8080:31689/TCP 3m11s | shell kubectl get svc nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx LoadBalancer 10.222.9.190 192.168.199.101 8080:31689/TCP 3m11s |
Now you can access the application using curl. | Теперь вы можете получить доступ к приложению, используя curl. |
shell curl -s -o /dev/null -w “%{http_code}” 192.168.199.101:8080 200 | shell curl -s -o /dev/null -w “%{http_code}” 192.168.199.101:8080 200 |