Публикация сервиса через L2LoadBalancer
-
Включите модуль:
apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: l2-load-balancer spec: enabled: true settings: loadBalancerClass: l2-class #опционально version: 1
-
Подготовьте приложение, которое хотите опубликовать:
kubectl create deploy nginx --image=nginx
-
Создайте ресурс L2LoadBalancer:
apiVersion: network.deckhouse.io/v1alpha1 kind: L2LoadBalancer metadata: name: ingress spec: addressPool: - 192.168.2.100-192.168.2.150 nodeSelector: node-role.kubernetes.io/loadbalancer: "" # селектор узлов-балансировщиков
-
Создайте ресурс Service со специальными аннотациями:
apiVersion: v1 kind: Service metadata: name: nginx-deployment annotations: network.deckhouse.io/l2-load-balancer-name: ingress network.deckhouse.io/l2-load-balancer-external-ips-count: "3" spec: type: LoadBalancer loadBalancerClass: l2-class ports: - port: 8000 protocol: TCP targetPort: 80 selector: app: nginx
В результате, созданному сервису с типом
LoadBalancer
будут присвоены адреса в заданном количестве:$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-deployment LoadBalancer 10.222.130.11 192.168.2.100,192.168.2.101,192.168.2.102 80:30544/TCP 11s
Полученные EXTERNAL-IP можно прописывать в качестве A-записей для прикладного домена.
$ curl -s -o /dev/null -w "%{http_code}" 192.168.2.100:8000 200 $ curl -s -o /dev/null -w "%{http_code}" 192.168.2.101:8000 200 $ curl -s -o /dev/null -w "%{http_code}" 192.168.2.102:8000 200