Я создал приложение nodejs / express с контроллером входящего трафика, которое работает на Kubernetes с Rancher. Только бэкэнд по умолчанию работает отлично, и я могу добраться до любого из своих маршрутов, созданных с помощью express, например http://1.2.3.4/api или http://1.2.3.4/api/districts.
Что не работает, так это пути, которые я определил, например http://1.2.3.4/gg1/api или http://1.2.3.4/gg2/api/districts. В журналах Pod я вижу ошибку 404 всякий раз, когда делаю запрос по одному из указанных мной путей.
Я часами безуспешно искал решение. Я видел, что у многих людей возникают проблемы с входом и путями по разным причинам, но я пока не мог найти решение своей проблемы. Может быть, кто-то здесь знает решение этой проблемы?
Чтобы заставить Ingression работать, я использовал этот пример здесь: Использование Kubernetes Ingress Controller с нуля
Вот как я все развертываю:
kubectl create -f deployment1-config.yaml
kubectl create -f deployment2-config.yaml
kubectl expose deployment test-ingress-node-1 --target-port=5000 --type=NodePort
kubectl expose deployment test-ingress-node-2 --target-port=5000 --type=NodePort
kubectl run nginx --image=nginx --port=80
kubectl expose deployment nginx --target-port=80 --type=NodePort
kubectl create -f ingress.yaml
Все запросы достигают только модуля бэкэнда по умолчанию, а пути с / gg1 или / gg2 дают только 404 в журнале модуля или Невозможно GET / gg1 в браузере.
вход-config.yaml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-node-adv-ingress
annotations:
kubernetes.io/ingress.class: "rancher"
ingress.kubernetes.io/rewrite-target: /
spec:
backend:
serviceName: test-ingress-node-1
servicePort: 5000
rules:
- host:
http:
paths:
- path: /gg1
backend:
serviceName: test-ingress-node-1
servicePort: 5000
- path: /gg2
backend:
serviceName: test-ingress-node-2
servicePort: 5000
развертывание-1.config.yaml:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
generation: 2
labels:
run: test-ingress-node-1
name: test-ingress-node-1
namespace: default
resourceVersion: "123456"
selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/test-ingress-node-1
spec:
replicas: 1
selector:
matchLabels:
run: test-ingress-node-1
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
run: test-ingress-node-1
spec:
containers:
- image: myProject-service-latest
imagePullPolicy: Always
name: test-ingress-node-1
ports:
- containerPort: 5000
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
dnsPolicy: ClusterFirst
restartPolicy: Always
securityContext: {}
terminationGracePeriodSeconds: 30
status:
availableReplicas: 1
observedGeneration: 2
replicas: 1
updatedReplicas: 1
развертывание-2.config.yaml:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
generation: 2
labels:
run: test-ingress-node-2
name: test-ingress-node-2
namespace: default
resourceVersion: "123456"
selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/test-ingress-node-2
spec:
replicas: 1
selector:
matchLabels:
run: test-ingress-node-2
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
run: test-ingress-node-2
spec:
containers:
- image: myProject-service-latest
imagePullPolicy: Always
name: test-ingress-node-2
ports:
- containerPort: 5000
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
dnsPolicy: ClusterFirst
restartPolicy: Always
securityContext: {}
terminationGracePeriodSeconds: 30
status:
availableReplicas: 1
observedGeneration: 2
replicas: 1
updatedReplicas: 1