使用ingress做路由转发和负载均衡。
cms.test域名 访问 cms-web service
cms.test/api/xx 访问 cms-gateway service
但是遇到请求地址错误的问题,因为默认转发到cms-gateway服务的请求地址多了/api,所以要对请求地址作处理。
需要添加配置,将请求/api/xx转发到gateway服务/xx接口。
nginx.ingress.kubernetes.io/configuration-snippet: rewrite "^/api(/.*)?$" "$1" break;
完整配置:
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: content-manage-system
namespace: cms-test
annotations:
kubesphere.io/creator: yuwb
kubesphere.io/description: test
nginx.ingress.kubernetes.io/configuration-snippet: rewrite "^/api(/.*)?$" "$1" break;
nginx.ingress.kubernetes.io/proxy-body-size: 20M
spec:
ingressClassName: nginx
rules:
- host: cms.test
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: cms-web
port:
number: 7770
- path: /api/
pathType: ImplementationSpecific
backend:
service:
name: cms-gateway
port:
number: 8061
为什么不直接使用nginx转发?
因为pod的ip是会变的,用ingress可以直接指向servicename,servicename是固定的,而service又指向了podname,避免了pod ip发生变化带来的问题。