Обратный прокси-сервер Docker nginx на Kubernetes - PullRequest
0 голосов
/ 05 июля 2019

У меня есть пара приложений, которые работают в контейнерах Docker (все на одной виртуальной машине). Перед ними у меня есть контейнер nginx в качестве обратного прокси. Теперь я хочу перенести это в Кубернетес.

Когда я запускаю их с помощью docker-composer локально, это работает, как и ожидалось. На Куберне нет.

nginx.conf

http {
        server {
                location / {
                        proxy_pass http://app0:80;
                }

                location /app1/ {
                        proxy_pass http://app1:80;
                        rewrite ^/app1(.*)$ $1 break;
                }

                location /app2/ {
                        proxy_pass http://app2:80;
                        rewrite ^/app2(.*)$ $1 break;
                }
        }
}

edit: nginx.conf не используется в kubernetes. Для этого мне нужно использовать ingress-контроллер:

deployment.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: app0
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: app0
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: app0
        image: appscontainerregistry1.azurecr.io/app0:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 80
          name: nginx
---
#the other apps
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations:
    # use the shared ingress-nginx
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: apps-url.com
    http:
      paths:
      - path: /
        backend:
          serviceName: app0
          servicePort: 80
      - path: /app1
        backend:
          serviceName: app1
          servicePort: 80
      - path: /app2
        backend:
          serviceName: app2
          servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: loadbalancer
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: ingress-nginx

Я получаю ответ на / (app0). К сожалению, подгруппы не работают. Что я делаю не так?

EDIT

Я разобрался. Ich пропустил установку входного контроллера. Как и на этой странице (https://kubernetes.io/docs/concepts/services-networking/ingress/) описано, вход не работает, если не установлен контроллер. Я использовал ingress-nginx в качестве контроллера (https://kubernetes.github.io/ingress-nginx/deploy/), потому что это было наиболее описанное руководство по установке, которое мне удалось найти, и я не хотел использовать HELM. У меня есть еще один вопрос. Как я могу изменить свой вход, чтобы субдомены работали. Например, k8url.com/app1/subroute показывает мне каждый раз стартовую страницу моего приложения1. И если я использую проксирование доменного имени, оно каждый раз перезаписывает доменное имя по IP.

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Добавить это:

apiVersion: v1
kind: Service
metadata:
  name: loadbalancer
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: ingress-nginx

Поскольку вы не перенаправили Service Балансировщик нагрузки на targetPort на 80

0 голосов
/ 05 июля 2019

вы успешно создали развертывание, но эта служба должна быть там.nginx ngress на kubernetes управляет трафиком на основе службы.

, поэтому поток выглядит как

nginx-ingress > service > deployment pod.

, вам не хватает создать службу для обоих приложений и добавить правильный маршрут на основе этого в kubernetes.вход.

...