Azure AKS ingress-nginx部署下Swagger UI可访问但API调用404问题求助
问题原因
你当前的Ingress规则仅配置了/swagger前缀的路径转发,只有请求路径以/swagger开头的流量才会被转发到后端的api-gateway服务。Swagger UI的静态资源都属于/swagger路径下,所以可以正常加载,但你发起业务API调用时的路径(比如/api/xxx、/v1/xxx这类)不属于/swagger前缀,无法匹配到Ingress规则,因此返回404错误。
解决方案
根据你的业务场景选择以下任意一种配置调整方式即可:
- 方式一:如果你的业务API有统一前缀(比如所有API都以
/api开头),直接在Ingress的paths列表中新增对应前缀的转发规则即可,示例配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: api-gateway-ingress annotations: nginx.ingress.kubernetes.io/from-to-www-redirect: "true" cert-manager.io/cluster-issuer: letsencrypt-prod #letsencrypt-staging nginx.ingress.kubernetes.io/ssl-redirect: 'true' spec: tls: - hosts: - my-domain.com secretName: tp-api-gateway-wildcard # get it from certificate.yaml rules: - host: my-domain.com http: paths: - path: /swagger pathType: Prefix backend: service: name: api-gateway port: number: 80 # 新增业务API前缀匹配规则,可根据实际前缀修改path值 - path: /api pathType: Prefix backend: service: name: api-gateway port: number: 80 ingressClassName: nginx
- 方式二:如果你的业务API没有统一前缀,或者希望该域名下的所有请求都转发到api-gateway服务,直接替换为根路径的转发规则即可,示例配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: api-gateway-ingress annotations: nginx.ingress.kubernetes.io/from-to-www-redirect: "true" cert-manager.io/cluster-issuer: letsencrypt-prod #letsencrypt-staging nginx.ingress.kubernetes.io/ssl-redirect: 'true' spec: tls: - hosts: - my-domain.com secretName: tp-api-gateway-wildcard # get it from certificate.yaml rules: - host: my-domain.com http: paths: - path: / pathType: Prefix backend: service: name: api-gateway port: number: 80 ingressClassName: nginx
修改配置后重新apply即可生效,业务API请求就能正常转发到后端服务。
内容的提问来源于stack exchange,提问作者Reda E.
相关产品推荐
相关产品推荐

