Skip to content

Instantly share code, notes, and snippets.

@smijar
Last active July 13, 2023 01:14
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save smijar/9995ddc1a85c62438a0652263fde38b7 to your computer and use it in GitHub Desktop.
Save smijar/9995ddc1a85c62438a0652263fde38b7 to your computer and use it in GitHub Desktop.
k3d loadbalancer demo

create cluster with port 8080 exposed to host for ingress/lb

k3d create --publish 8080:8080 --name testcls1 --workers 3

ref

https://felixwiedmann.de/k3d-manage-k3s-clusters/

demo-app.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: k3d-demo-deployment
  namespace: k3d-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: k3d-demo
  template:
    metadata:
      labels:
        app: k3d-demo
    spec:
      containers:
      - name: k3d-demo
        image: agabert/beacon
        resources:
          requests:
            memory: "32Mi"
            cpu: "10m"
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: k3d-demo
  namespace: k3d-demo
spec:
  ports:
  - port: 80
    targetPort: 80
    name: http
  selector:
    app: k3d-demo

deploy

kubectl apply -f demo-app.yaml

once it starts, add a helper container to do a http request

kubectl --namespace=k3d-demo run -it --image=alpine helper-container

in bash in helper container: wget -SO- k3d-demo/metrics

or $ apk add curl curl -s k3d-demo/metrics

Loadbalancer - access services from outside cluster

Lets try to get the http-server available from outside the cluster. Here you can use the NodePort or LoadBalancer resource. Change the service from ClusterIP to LoadBalancer

---
apiVersion: v1
kind: Service
metadata:
  name: k3d-demo
  namespace: k3d-demo
spec:
  type: LoadBalancer
  ports:
  - port: 8080 # because else it requires sudo access to create low port number and will be stuck in pending state
    targetPort: 80
    name: http
  selector:
    app: k3d-demo

check docker network

docker network ls docker network inspect k3d-testcls1 host

ingress

https://kubernetes.io/docs/concepts/services-networking/ingress/#name-based-virtual-hosting

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment