@djsly @Jean-Philippe Bond - 感谢您的回复并指出帮助我进一步调查的 URL。将后端应用程序部署在端口 80 上是有原因的,因为 SSL 在应用程序网关处终止,并且侦听器将请求重定向到在端口 80 上运行的后端应用程序,这工作正常。
经过进一步调查,我在入口文件 (appgw.ingress.kubernetes.io/backend-path-prefix: "/api/orders/employees") 中添加了后端路径前缀,这解决了一个端点的问题,但不是所有端点.
为了详细描述问题,应用程序包含一些下面提到的restful服务,它们的端点例如-
http://hostname/api/orders/employees
http://hostname/api/Lookup/officeHierarchy
http://hostname/api/Department/codes
http://hostname/api/position/members
现在,如果您看到,这些不同的端点以前缀“/api/”开头,然后是控制器名称和操作。
这里预期结果是
如果调用这些端点中的任何一个(通过 HTTP Get),则应该返回数据,但它会失败。
目前已完成调查
我添加了前缀并对其进行了一些更改。因此,如果我像下面这样配置我的入口,它只为一个特定的端点成功返回结果 - >
curl -v http://orders.apps.com/api/orders/employees 返回 200 但其他人失败。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ordersapi
namespace: orders
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-path-prefix: "/api/orders/employees"
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "wildcard.apps.com"
appgw.ingress.kubernetes.io/ssl-redirect: "true"
spec:
rules:
- host: orders.apps.com
http:
paths:
- path: /api/orders/employees
backend:
serviceName: orderservice
servicePort: 80
因此,为了使所有端点都能正常工作,我在上述入口文件中进行了以下更改,但调用
curl -v http://orders.apps.com/api/orders/employees 返回 404。其他端点也是如此
curl -v http://orders.apps.com/api/department/codes 返回 404。
根据我的理解,通过执行以下更改 - “路径 - /api/*”应该被覆盖到路径 - /api/orders/employees 被调用,但它没有。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ordersapi
namespace: orders
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-path-prefix: "/api/"
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "wildcard.apps.com"
appgw.ingress.kubernetes.io/ssl-redirect: "true"
spec:
rules:
- host: orders.apps.com
http:
paths:
- path: /api*
backend:
serviceName: orderservice
servicePort: 80
感谢您的建议。
谢谢