No description
  • Go 41.2%
  • Shell 40.6%
  • Dockerfile 11.8%
  • Makefile 6.4%
Find a file
2019-08-07 00:42:25 +02:00
registry initial commit 2019-08-03 22:31:25 +02:00
testapp istio improvements 2019-08-07 00:42:25 +02:00
.gitignore initial commit 2019-08-03 22:31:25 +02:00
loop.sh istio improvements 2019-08-07 00:42:25 +02:00
README.md typo 2019-08-03 22:34:10 +02:00
wrk.go initial commit 2019-08-03 22:31:25 +02:00

kube

This repo contains some kubernetes test stuff

testapp

The testapp consists of three parts:

  • srv - the frontend server
  • db - simulating a database backend that gets called
  • api - another service that calls an external service (httpbin.org)

Topology:

         +--- db
        /
srv ---+
        \
         +--- api --- httpbin.org

Prepare

You need to have access from you local machine to the container registry deployed in you cluster on port 5000:

You can use ssh port-forwarding: ssh k8s-master -L 5000:127.0.0.1:5000

You need a local docker installation to build and upload the containers.

For the normal deployment the nginx ingress controller is used.

Ingress traffic

To get traffic to the ingress controller, install an nginx tcp proxy on the master node:

Install nginx: apt install nginx -y

Configure nginx to forward traffic to the node ports. First get the ports of your ingress controller.

Look for the 80:<nodeport> and 443:<nodeport> mappings.

  • nginx: kubectl -n ingress-nginx get svc ingress-nginx
  • Istio: kubectl -n istio-system get svc istio-ingressgateway

Now add all your worker nodes as stream backends with the ports:

cat <<EOF> /etc/nginx/nginx.conf
load_module /usr/lib/nginx/modules/ngx_stream_module.so;
events {
    worker_connections  1024;
}
stream {
    upstream stream_backend_80 {
        server 192.168.0.3:31380;
        server 192.168.0.4:31380;
        server 192.168.0.5:31380;
    }
    server {
        listen     80;
        proxy_pass stream_backend_80;
    }

    upstream stream_backend_443 {
        server 192.168.0.3:31390;
        server 192.168.0.4:31390;
        server 192.168.0.5:31390;
    }
    server {
        listen     443;
        proxy_pass stream_backend_443;
    }
}
EOF

Restart nginx: systemctl restart nginx

Now you can access your ingress via the masters IP on port 80 and 443.

Build

New build the containers and upload them.

SRV

cd testapp/srv
VERSION=v1 make

DB

cd testapp/db
VERSION=v1 make

API

cd testapp/api
VERSION=v1 make

Deploy

Deploy your application stack either using the simple versions or the -istio versions.

To use -istio versions you need to install istio in your cluster first.

Note: Change the k8s-testapp.example.com domain in the srv manifests to your domain.

Simple

cd testapp
kubectl apply -f api/api-v1.yaml
kubectl apply -f db/db.yaml
kubectl apply -f srv/srv-v1.yaml

Istio

cd testapp
kubectl apply -f api/api-v1-istio.yaml
kubectl apply -f db/db.yaml
kubectl apply -f srv/srv-v1-istio.yaml