Metallb можно использовать в статических (Bare Metal) кластерах, когда вы не можете заказать load balancer у облачного провайдера. Metallb может работать в L2 или BGP режиме. | 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 в L2 режиме.
Мы создадим Ingress Controller с inlet | We will create an Ingress Controller with |
Во-первых, необходимо определить, какие NodeGroup’ы будут использоваться для запуска приложений, к которым будет предоставлен доступ.
В этом примере Ingress-контроллеры запускаются на frontend-узлах, а Nginx — на worker-узле. У всех узлов есть общий лейбл | 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 runs on a worker node in this example. They have common label |
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 |
Ваш Ingress-контроллер доступен по внешнему IP-адресу. | Your Ingress controller is accessible on an external IP address. |
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 |
Теперь предоставим доступ к Nginx на порту | Expose your standalone Nginx on |
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 |
Теперь вы можете получить доступ к приложению, используя curl. | Now you can access the application using 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 |