Создание службы LoadBalancer

Делаю:
12.09.2021


Deployment создан какздесь


$ cat << 'EOF' | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
  name: nodejs-casts-app-loadbalancer
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
    nodePort: 30123
  selector:
    app: nodejs-cats-app
    env: dev
EOF


$ kubectl get svc
NAME                            TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
nodejs-casts-app-loadbalancer   LoadBalancer   10.104.115.199   <pending>     80:30123/TCP   55s


В общем в облаках, если мы сами создавали виртуалки, нужно дополнительно руками создавать Load Balancers (по крайней мере в AWS). Если мы используем готовое kubernetes решение, EXTERNAL-IP нам прилетит сам через какое-то время. (Пару минут). Чтобы пример заработал локально. Нужно установить, например Metal LB


$ kubectl describe svc nodejs-casts-app-loadbalancer
Name:                     nodejs-casts-app-loadbalancer
Namespace:                demo
Labels:                   <none>
Annotations:              Selector:  app=nodejs-cats-app,env=dev
Type:                     LoadBalancer
IP:                       10.104.115.199
Port:                     <unset>  80/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  30123/TCP
Endpoints:                172.17.0.4:8080,172.17.0.5:8080,172.17.0.6:8080
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>


Чтобы работало, нужно чтобы в Endpoints были перечислены IP виртуальных подов и порты запущенных приложений.


// Если не используется профиль, удалить
// Если не используется namespace, таке можно убрать -n default
$ echo $(minikube --profile ${PROFILE} service nodejs-casts-app-loadbalancer -n default --url)


http://192.168.99.113:30123


Удалить созданное

// Удалить сервис, если больше не нужен
$ kubectl delete svc nodejs-casts-app-loadbalancer