# Load Balancer
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
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:
name: wordpress-lb
annotations:
k44sServiceType: HTTP
k44sSslEnabled: "True"
labels:
app: hello-wordpress
spec:
ports:
- port: 80
name: http
protocol: TCP
- port: 443
name: https
protocol: TCP
selector:
app: hello-wordpress
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"
...