我在不同的端口上托管了两个服务,并且创建了一个看起来像这样的入口资源
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
namespace: mynamespace
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- http:
paths:
- path: /svc1/
backend:
serviceName: app1-svc
servicePort: 3000
- path: /svc2/
backend:
serviceName: app2-svc
servicePort: 8080
在此之上,我创建了一个 NodePort 类型的入口控制器。
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-ingress
name: controller-nginx-ingress-controller
spec:
clusterIP: 10.88.18.191
externalTrafficPolicy: Cluster
ports:
- name: http
nodePort: 30080
port: 80
protocol: TCP
targetPort: http
- name: https
nodePort: 31442
port: 443
protocol: TCP
targetPort: https
selector:
app: nginx-ingress
component: controller
release: controller
最后,设置一个云负载平衡器以访问在我的K8S集群上运行的应用程序。
问题: 我无法使用URL路由访问我的任何应用程序
有人可以让我知道我在做什么错吗?以及如何解决这个问题?
答案 0 :(得分:0)
根据您在评论中提到的内容,我很确定可以通过重写路径来解决问题。
现在,当您使用/svc1/
向path: /svc1/
发送请求时,该请求将转发到app1-svc
,路径设置为/svc1/
,并且您收到404错误app1中没有这样的路径。根据您所说的,您很可能可以使用重写解决问题。您可以使用nginx.ingress.kubernetes.io/rewrite-target
批注来实现它,因此您的入口应如下所示:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
namespace: mynamespace
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- http:
paths:
- path: /svc1(/|$)(.*)
backend:
serviceName: app1-svc
servicePort: 3000
- path: /svc2(/|$)(.*)
backend:
serviceName: app2-svc
servicePort: 8080
在这种情况下,当发送路径设置为/svc1/something
的请求时,请求将被转发到app1,路径重写为/something
。
也可以看看ingress docs for more explanation。
让我知道它是否解决了您的问题。