我首先创建了一个入口群集和一个入口服务,然后将请求路由到指向k8s群集中的NodePort-serviceA(资源服务)和NodePort-serviceB(人员服务)(入口文件)(通过如下所述应用了staffing-ingress.yaml的名称。
Resources-service和Staffing-service可以从容器内部相互通信,并在资源容器中命中curl命令“ curl –v http://staffing-service:8080/swagger/index.html”时,使用HTTP 200返回准确的结果,反之亦然。但是,如果像这样的http://staffing-service:8080/击中不完整的URL,则会引发404错误。
我怀疑下面的staffing-ingress.yaml文件中的路径路由方式。欢迎任何建议。
以下是详细信息
使用nginx负载平衡器IP访问服务(人员或资源)不会返回结果并抛出404错误。
Curl –v http:// a5b9f45d4119a11eabbd90a9c35f3125-1159448980.us-east-2.elb.amazonaws.com:80/api/resources throws the below error
* TCP_NODELAY set
* Connected to a5b9f45d4119a11eabbd90a9c35f3125-1159448980.us-east-2.elb.amazonaws.com (3.134.165.38) port 80 (#0)
< HTTP/1.1 404 Not Found
< Server: openresty/1.15.8.2
< X-Response-Time-ms: 0
Staffing-Ingress.YAML
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: staffing-ingress
namespace: default
annotations:
ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
http:
paths:
- path: /api/resources
backend:
serviceName: resources-service
servicePort: 8001
- path: /api/staffing
backend:
serviceName: staffing-service
servicePort: 8080
预期结果 是在使用具有URI“ / api / resources /”的外部LB从入口进行攻击时,应调用api服务http://resources-service:8001/swagger/index.html。
答案 0 :(得分:1)
一切都在路由方面正常工作。 您使用的URL错误。 您必须使用该网址
http:// a5b9f45d4119a11eabbd90a9c35f3125-1159448980.us-east-2.elb.amazonaws.com:80/api/resources/swagger/index.html
您必须在自己的网址中添加 swagger / index.html ,就像通过服务访问它时一样。
curl –v http://staffing-service:8080/swagger/index.html
curl –v http:// a5b9f45d4119a11eabbd90a9c35f3125-1159448980.us-east-2.elb.amazonaws.com:80/api/resources/swagger/index.html
答案 1 :(得分:0)
Ingress不会删除上下文路径!
因此,您在Ingress前对{{1}}的呼叫不等于Ingress后对www.xxx.yyy/api/resources/
的呼叫。这个想法是您的支持服务也将需要具有相同的上下文路径。
您需要做的就是为这两个服务添加上下文路径:
www.xxx.yyy/