KubernetesInc Ingress Nginx
Делаю
24.04.2019
Пример из видеокурса Learn DevOps The Complete Kubernetes Course
Подготовили кластер и окружение как здесь.
В общем, если использовать последнюю версию ingress controller (mandatory.yaml), что предлагают на github, то не работает. Я по быстрому не разобрался в чем причина. Может потом, когда будет более актуально. Также выслушаю предложения в чате.
$ cd ~/tmp
$ curl -LJO https://raw.githubusercontent.com/wardviaene/kubernetes-course/master/ingress/nginx-ingress-controller.yml
$ vi nginx-ingress-controller.yml
меняю версию nginx-ingress-controller:0.17.1 на nginx-ingress-controller:0.24.1
$ kubectl create -f nginx-ingress-controller.yml
$ kubectl create -f https://raw.githubusercontent.com/wardviaene/kubernetes-course/master/ingress/ingress.yml
$ kubectl create -f https://raw.githubusercontent.com/wardviaene/kubernetes-course/master/ingress/echoservice.yml
$ kubectl create -f https://raw.githubusercontent.com/wardviaene/kubernetes-course/master/ingress/helloworld-v1.yml
$ kubectl create -f https://raw.githubusercontent.com/wardviaene/kubernetes-course/master/ingress/helloworld-v2.yml
$ kubectl get pods
$ curl 192.168.0.11
$ curl http://192.168.0.11 -H 'Host:helloworld-v1.example.com'
Hello World!
Устанавливю haproxy как здесь
$ echo "192.168.0.5 helloworld-v1.example.com" | sudo tee -a /etc/hosts
$ echo "192.168.0.5 helloworld-v2.example.com" | sudo tee -a /etc/hosts
$ curl helloworld-v1.example.com
$ curl helloworld-v2.example.com
OK
Попробуем запустить свое приложение:
$ kubectl delete -f https://raw.githubusercontent.com/wardviaene/kubernetes-course/master/ingress/ingress.yml
$ kubectl delete -f https://raw.githubusercontent.com/wardviaene/kubernetes-course/master/ingress/helloworld-v1.yml
$ kubectl delete -f https://raw.githubusercontent.com/wardviaene/kubernetes-course/master/ingress/helloworld-v2.yml
$ cat <<EOF | kubectl apply -f -
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nodejs-cats-app-rules
spec:
rules:
- host: nodejs-cats-app.example.com
http:
paths:
- path: /
backend:
serviceName: nodejs-cats-app
servicePort: 80
EOF
$ cat <<EOF | kubectl apply -f -
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nodejs-cats-app-deployment
spec:
replicas: 1
template:
metadata:
labels:
app: nodejs-cats-app
spec:
containers:
- name: nodejs-cats-app
image: webmakaka/cats-app:latest
---
apiVersion: v1
kind: Service
metadata:
name: nodejs-cats-app
spec:
type: NodePort
ports:
- port: 80
nodePort: 30303
targetPort: 8080
protocol: TCP
name: http
selector:
app: nodejs-cats-app
EOF
$ curl http://192.168.0.11 -H 'Host:nodejs-cats-app.example.com'
OK
Еще один пример. На этот раз из видеокурса Packtpub - Kubernetes Recipes [Video].
Качать, а тем более покупать его я никому не рекомендую!
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
$ kubectl get pods --all-namespaces | grep ingress-nginx
ingress-nginx nginx-ingress-controller-5694ccb578-2jqw2 1/1 Running 0 97s
$ mkdir -p ~/tmp/ingress && cd ~/tmp/ingress
# vi web-01.yaml
apiVersion: v1
kind: Pod
metadata:
name: web-01
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
$ kubectl create -f web-01.yaml
$ kubectl expose pod web-01 --type="ClusterIP" --port 80
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3h10m
web-01 ClusterIP 10.108.124.242 <none> 80/TCP 12s
# vi ingress.yaml
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: NodePort
ports:
- name: http-new
port: 80
targetPort: 80
protocol: TCP
nodePort: 30090
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
$ kubectl create -f ingress.yaml
$ kubectl get service --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3h15m
default web-01 ClusterIP 10.108.124.242 <none> 80/TCP 4m52s
ingress-nginx ingress-nginx NodePort 10.96.176.174 <none> 80:30090/TCP 21s
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 3h15m
Now we will define the rules for ingress
# vi ingress-rules.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-test
annotations:
kubernetes.io/ingress.class: nginx
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: kube-master.labs.local
http:
paths:
- path: /
backend:
serviceName: web-01
servicePort: 80
$ kubectl create -f ingress-rules.yaml
$ kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
ingress-test kube-master.labs.local 80 91s
$ sudo su -
# vi /etc/hosts
192.168.0.11 kube-master.labs.local
192.168.0.11 - одна из нод кластера.
$ curl http://192.168.0.11:30090 -H 'Host:kube-master.labs.local'