Load Balancer

Konfiguracja publicznego dostępu do usługi w klastrze Oktawave Kubernetes Service

Usługa Load Balancera pozwala na wystawienie dostępu do aplikacji działającej w klastrze poprzez publiczny adres IP oraz load-balancing ruchu. Load Balancer tworzony jest poprzez zdefiniowanie serwisu w klastrze Kubernetes.

Tworzenie Load Balancera

Tworzenie Load Balancera odbywa się poprzez definicję serwisu typu LoadBalancer. Na chwilę obecną umożliwiamy utworzenie serwisu z jednym wybranym portem, lub z dwoma dla HTTP(80) i HTTPS(443). Poniżej przedstawiona są minimalne konfiguracja serwisu dla obu przypadków.

Dowolny port

Tablica ports musi zawierać dokładnie jeden element.

oks-wordpress-lb.yml
oks-wordpress-lb.yml
apiVersion: v1
kind: Service
metadata:
name: hello-wordpress-lb
labels:
app: hello-wordpress
spec:
ports:
- port: 80
selector:
app: hello-wordpress
type: LoadBalancer

Jako selector w tym wypadku użyliśmy nazwy deploymentu pod parametrem app. Będzie to Load Balancer dla Wordpressa zdefiniowanego w Uruchomienie aplikacji.

Tak utworzony plik przekazujemy do kubectl jako konfigurację nowego serwisu:

kubectl apply -f oks-wordpress-lb.yml

Możemy zweryfikować jego działanie komendą:

$ kubectl get svc  15:08:34 
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9d
hello-wordpress-lb LoadBalancer 10.99.105.105 <pending> 80:31201/TCP 4s

HTTP + HTTPS

W poniższej konfiguracji otwierane są dwa porty, dla HTTP i HTTPS.

apiVersion: v1
kind: Service
metadata:
annotations:
k44sServiceType: HTTP
k44sSslEnabled: "True"
labels:
run: my-nginx
name: my-nginx
spec:
ports:
- port: 80
name: http
protocol: TCP
targetPort: 80
- port: 443
name: https
protocol: TCP
targetPort: 443
selector:
run: my-nginx
type: LoadBalancer

Zaawansowana konfiguracja Load Balancera

Load balancer posiada dodatkowe opcje konfiguracji, dostępne przez wpis w annotations.

Konfiguracja obsługi SSL

Niektóre przypadki wymagają obsługi dwóch portów w szczególności 80 i 443 dla HTTP i HTTPS. Na taką ewentualność można użyć specjalnego trybu LB. Przykład:

apiVersion: v1
kind: Service
metadata:
annotations:
k44sServiceType: HTTP # 1. set LB mode to HTTP
k44sSslEnabled: "True" # 2. Enable SSL for LB
labels:
run: my-nginx
name: my-nginx
spec:
ports:
- port: 80 # 3. define port for HTTP
name: http
protocol: TCP
targetPort: 80
- port: 443 # define port for HTTPS
name: https
protocol: TCP
targetPort: 443
selector:
run: my-nginx

Session Persistence Type

Dostępne wartości: IP, Cookie, None. Domyślnie: IP.

apiVersion: v1
kind: Service
metadata:
name: sample-load-balancer
annotations:
# Session Persistence type
k44sSessionPersistenceType: "IP"
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 3000
name: http

Load Balancer Algorithm

Dostępne wartości: RoundRobin, LeastConnection, LeastResponseTime, SourceIPHash. Domyślnie: RoundRobin.

...
metadata:
name: sample-load-balancer
annotations:
k44sLoadBalancerAlgorithm: "RoundRobin"
...