Skip to content

Latest commit

 

History

History

loadbalancers

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Loadbalancers

OpenStack Cloud Controller Manager runs service controller, which is responsible for watching services of type LoadBalancer and creating OpenStack loadbalancers to satisfy its requirements. Here are some examples of how it's used.

External HTTP loadbalancer

When you create a service with type: LoadBalancer, an OpenStack load balancer will be created. The example below will create a nginx deployment and expose it via an OpenStack External load balancer.

---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: external-http-nginx-deployment
  annotations:
    service.beta.kubernetes.io/openstack-internal-load-balancer: "false"
    loadbalancer.openstack.org/floating-network-id: "9be23551-38e2-4d27-b5ea-ea2ea1321bd6"
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
  name: external-http-nginx-service
spec:
  selector:
    app: nginx
  type: LoadBalancer
  ports:
  - name: http
    port: 80
    targetPort: 80

The service.beta.kubernetes.io/openstack-internal-load-balancer annotation is used on the service to indicate that we want an internal loadbalancer service. If the value of service.beta.kubernetes.io/openstack-internal-load-balancer is false, it indicates that we want an external loadbalancer service. Default to false.

The loadbalancer.openstack.org/floating-network-id annotation indicates that it will create a floating IP for the external loadbalancer service on the specified floating network id. This annotation works when the value of service.beta.kubernetes.io/openstack-internal-load-balancer is false. If this annotation is not specified, it will use the default floating network id.

$ kubectl create -f examples/loadbalancers/external-http-nginx.yaml

Watch the service and await an EXTERNAL-IP by the following command. This will be the load balancer IP which you can use to connect to your service.

$ watch kubectl get service
NAME                 CLUSTER-IP     EXTERNAL-IP       PORT(S)        AGE
http-nginx-service   10.0.0.10      122.112.219.229   80:30000/TCP   5m

You can now access your service via the provisioned load balancer.

$ curl http://122.112.219.229

Internal HTTP loadbalancer

The example below will create a nginx deployment and expose it via an OpenStack Internal load balancer.

---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: internal-http-nginx-deployment
  annotations:
    service.beta.kubernetes.io/openstack-internal-load-balancer: "true"
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
  name: internal-http-nginx-service
spec:
  selector:
    app: nginx
  type: LoadBalancer
  ports:
  - name: http
    port: 80
    targetPort: 80

The value of service.beta.kubernetes.io/openstack-internal-load-balancer is true, it indicates that we want an internal loadbalancer service.

$ kubectl create -f examples/loadbalancers/internal-http-nginx.yaml

Watch the service and await an EXTERNAL-IP by the following command. This will be the load balancer IP which you can use to connect to your service.

$ watch kubectl get service
NAME                 CLUSTER-IP     EXTERNAL-IP       PORT(S)        AGE
http-nginx-service   10.0.0.10      192.168.0.181     80:30000/TCP   5m

You can now access your service via the provisioned load balancer.

$ curl http://192.168.0.181