У меня есть пара приложений, которые работают в контейнерах 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.