Как подключить фронтенд к бекапу в K8S? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть приложение с двумя развертываниями k8s, которое называется onboarding-server, а frontend onboarding-server - это сервер узлов, а frontend - это реагирующее приложение, которое создается и разворачивается с использованием Nginx.

Вот фрагмент, который возвращается, когда я запускаю kubectl get all

NAME                                       READY   STATUS    RESTARTS   AGE
pod/frontend-deployment-578f898ffb-cc7gc   1/1     Running   0          15s
pod/node-deployment-7f4754fdf5-fnmls       1/1     Running   0          7d10h

NAME                        TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)          AGE
service/frontend-service    LoadBalancer   10.100.200.64    10.167.198.105   80:31167/TCP     13d
service/node-service   LoadBalancer   10.100.200.71    10.167.199.136   3200:32276/TCP   13d

NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/frontend-deployment   1/1     1            1           5d12h
deployment.apps/node-deployment       1/1     1            1           7d10h

NAME                                             DESIRED   CURRENT   READY   AGE
replicaset.apps/frontend-deployment-578f898ffb   1         1         1       17s
replicaset.apps/node-deployment-7f4754fdf5       1         1         1       7d10h

И моя конфигурация nginx.conf выглядит примерно так

upstream node-service{
  server node-service;
}

server {

    listen 80;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }


    location = /api {
      proxy_pass http://node-service;
    }

    error_page 404 /index.html;
    location = / {
      root /usr/share/nginx/html;
      internal;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root   /usr/share/nginx/html;
    }
}

Теперь я пытаюсь чтобы поговорить с моей серверной службой из внешнего интерфейса, используя этот URL

/api/onboarding/v1/user/login

Я понимаю, что Nginx заключается в том, что когда я запрашиваю /api, он должен перенаправить меня на http://node-service/api/onboarding/v1/user/login и следовательно, должен вернуть соответствующий ответ. Но я получаю

Fetch failed loading: POST
 http://192.168.5.21/api/onboarding/v1/user/login

Как я могу подключиться к службе узла из Nginx?

РЕДАКТИРОВАТЬ 1. Одна вещь, которую я забыл упомянуть, это то, что когда я go внутри контейнера с помощью команды exec Я могу получить соответствующий ответ, используя

curl http://192.168.5.21/api/onboarding/v1/user/login

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Для маршрутизации на основе путей в Кубернетесе я предлагаю вам взглянуть на Ingress . Вы можете использовать Nginx Ingress для kubernetes в вашем случае. Вы сможете отображать службы на основе пути.

Например,

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: demo-ingress
  annotations: {
    'kubernetes.io/ingress.class': nginx
  }
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /foo
        backend:
          serviceName: demo-backend
          servicePort: 80

Теперь, когда вы используете nginx в качестве обратного прокси-сервера, вы можете выставить свой бэкэнд Служба в качестве типа NodePort и использование внешнего IP-адреса вашей внутренней службы вместо использования имени службы -

location = /api {
  proxy_pass http://external-ip:port;
}
0 голосов
/ 15 апреля 2020

В вашей FE вы можете развернуть этот конфиг:

server {
  listen 80;

  location / {
        include /etc/nginx/mime.types;
        try_files $uri $uri/ /index.html;
  }

  location /be-svc/ {
        proxy_pass "http://<be-svc>.<namespace>/";
  }
}

После этого ваш Dockerfile может выглядеть примерно так:

FROM nginx:1.14

COPY build /usr/share/nginx/html
RUN rm /etc/nginx/conf.d/default.conf

COPY config/nginx/sites-available/api.conf /etc/nginx/conf.d

И просто поместите вход как обычно в перед вашей службой FE. Надеюсь, это поможет!

...