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
1
apiVersion: v1
2
kind: Service
3
metadata:
4
name: hello-wordpress-lb
5
labels:
6
app: hello-wordpress
7
spec:
8
ports:
9
- port: 80
10
selector:
11
app: hello-wordpress
12
type: LoadBalancer
Copied!
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:
1
kubectl apply -f oks-wordpress-lb.yml
Copied!
Możemy zweryfikować jego działanie komendą:
1
$ kubectl get svc  15:08:34 
2
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
3
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9d
4
hello-wordpress-lb LoadBalancer 10.99.105.105 <pending> 80:31201/TCP 4s
Copied!

HTTP + HTTPS

W poniższej konfiguracji otwierane są dwa porty, dla HTTP i HTTPS.
1
apiVersion: v1
2
kind: Service
3
metadata:
4
name: wordpress-lb
5
annotations:
6
k44sServiceType: HTTP
7
k44sSslEnabled: "True"
8
labels:
9
app: hello-wordpress
10
spec:
11
ports:
12
- port: 80
13
name: http
14
protocol: TCP
15
- port: 443
16
name: https
17
protocol: TCP
18
selector:
19
app: hello-wordpress
20
type: LoadBalancer
Copied!

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:
1
apiVersion: v1
2
kind: Service
3
metadata:
4
annotations:
5
k44sServiceType: HTTP # 1. set LB mode to HTTP
6
k44sSslEnabled: "True" # 2. Enable SSL for LB
7
labels:
8
run: my-nginx
9
name: my-nginx
10
spec:
11
ports:
12
- port: 80 # 3. define port for HTTP
13
name: http
14
protocol: TCP
15
targetPort: 80
16
- port: 443 # define port for HTTPS
17
name: https
18
protocol: TCP
19
targetPort: 443
20
selector:
21
run: my-nginx
Copied!

Session Persistence Type

Dostępne wartości: IP, Cookie, None. Domyślnie: IP.
1
apiVersion: v1
2
kind: Service
3
metadata:
4
name: sample-load-balancer
5
annotations:
6
# Session Persistence type
7
k44sSessionPersistenceType: "IP"
8
spec:
9
type: LoadBalancer
10
ports:
11
- protocol: TCP
12
port: 80
13
targetPort: 3000
14
name: http
Copied!

Load Balancer Algorithm

Dostępne wartości: RoundRobin, LeastConnection, LeastResponseTime, SourceIPHash. Domyślnie: RoundRobin.
1
...
2
metadata:
3
name: sample-load-balancer
4
annotations:
5
k44sLoadBalancerAlgorithm: "RoundRobin"
6
...
Copied!
Last modified 2mo ago