Deploy приложения из видео курса [Stephen Grider] Docker and Kubernetes: The Complete Guide [2018, ENG]


Делаю:
09.11.2019


$ minikube version
minikube version: v1.4.0
commit: 7969c25a98a018b94ea87d949350f3271e9d64b6


Этот вариант будет работать (предположительно) только на minikube.


Ссылка на github:
https://github.com/webmak1/Docker-and-Kubernetes-The-Complete-Guide-Deploy-on-Local-Kubernetes-Cluster-Only


Само приложение:

Docker and Kubernetes The Complete Guide


$ minikube start
$ minikube addons enable ingress


Разворачиваем приложение

$ cd ~/tmp
$ git clone https://github.com/webmak1/Docker-and-Kubernetes-The-Complete-Guide-Deploy-on-Local-Kubernetes-Cluster-Only

$ cd ~/tmp/Docker-and-Kubernetes-The-Complete-Guide-Deploy-on-Local-Kubernetes-Cluster-Only/kubernetes/

$ kubectl create secret generic pgpassword --from-literal PGPASSWORD=12345asdf

$ kubectl create -f .

$ kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
client-deployment-7677fdbc66-259wz     1/1     Running   0          66s
client-deployment-7677fdbc66-7tv6d     1/1     Running   0          66s
client-deployment-7677fdbc66-czqbk     1/1     Running   0          66s
postgres-deployment-79d45ff857-w2ffn   1/1     Running   0          66s
redis-deployment-6f6947dd7d-4d6vc      1/1     Running   0          66s
server-deployment-74b6f7844f-5pp7w     1/1     Running   0          65s
server-deployment-74b6f7844f-fhqkv     1/1     Running   0          65s
server-deployment-74b6f7844f-krn5n     1/1     Running   0          65s
wroker-deployment-864db9dddc-wtr82     1/1     Running   0          65s


KubernetesInc Ingress Nginx

$ cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: grider-app-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/ssl-redirect: 'false'
spec:
  rules:
  - host: grider-app.com
    http:
      paths:
      - path: /?(.*)
        backend:
          serviceName: client-cluster-ip-service
          servicePort: 3000
      - path: /api/?(.*)
        backend:
          serviceName: server-cluster-ip-service
          servicePort: 5000
EOF


// Ждем адрес
$ kubectl get ingress
NAME              HOSTS              ADDRESS     PORTS   AGE
example-ingress   grider-app.com   10.0.2.15   80      44s


$ minikube ip
192.168.99.120


$ sudo vi /etc/hosts
192.168.99.120 grider-app.com


http://grider-app.com


Ошибка!!!


При обращении к адресам

http://grider-app.com/api/values/current http://grider-app.com/api/values/all

Не должно показываться: Hi http://grider-app.com/

Какой-то баг в ingress


Debug

В общем я уже нашел причину. По какой-то причине ключ rewrite-target не сохраняется.

$ kubectl get ingress

$ kubectl describe ingress example-ingress

$ kubectl get ingress -o json

$ kubectl edit ingress -o json


"nginx.ingress.kubernetes.io/rewrite-target": "/"


Меняю на:

"nginx.ingress.kubernetes.io/rewrite-target": "/$1"


Приложение должно работать.


Ожидаемый результат:

Docker and Kubernetes The Complete Guide


Удаляем, если не нужно

$ minikube stop
$ minikube delete