initial commit

This commit is contained in:
ston1th 2019-08-03 22:31:25 +02:00
commit 0e6be50e37
23 changed files with 1069 additions and 0 deletions

131
README.md Normal file
View file

@ -0,0 +1,131 @@
# 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.
For nginx: `kubectl -n ingress-nginx get svc ingress-nginx`
For Istio: `kubectl -n istio-system get svc istio-ingressgateway`
Now add all your 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
```