这看起来可能像一个复制,但并不是因为链接线程中的解决方案对我不起作用。
我已经配置了根据路径将请求发送到不同的豆荚
期望的行为:
public_ip/app1 -> pod1 1_ip:容器1_port/
public_ip/app2 -> pod2 2_ip:容器2_port/
public_ip/app3 -> pod3 3_ip:容器3_port/
实际行为:
public_ip/app1 -> pod1 1_ip:收集器1_port/app1
public_ip/app2 -> pod2 2_ip:容器2_port/app2
公用ip/app3 -> pod3 3_ip:收集器3_port/app3
所以我们在app1,app2,app3上得到了404 s。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: some_name
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
acme.cert-manager.io/http01-edit-in-place: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
ingressClassName: "nginx"
tls:
- hosts:
- some.host
secretName: tls-cafe-ingress
rules:
- host: some.host
http:
paths:
- path: /app1(/|$)(.*)
backend:
serviceName: app1
servicePort: 1234
- path: /app2(/|$)(.*)
backend:
serviceName: app2
servicePort: 2345
- path: /app3(/|$)(.*)
backend:
serviceName: app3
servicePort: 3456问题是,一旦有正则表达式,就会生成路径规范。这可以通过检查Ingress的日志来看到:
k logs -n nginx-ingress ingress-pod-name在这里,我们可以看到hat在日志中有对/appX的请求,并试图从本地html文件夹中提供这些请求,换句话说,yaml中定义的路径被忽略了。
如果将regexes从路径中移除,则路径将向下发送到目标荚,从而破坏应用程序。
发布于 2020-12-21 10:08:29
有两种流行的K8s侵入控制器使用Nginx:
community ingress controller。在这种情况下应用的关键区别是注释的使用。对于您使用的社区入口控制器:
nginx.ingress.kubernetes.io/<annotation_type>
对于nginxinc的用途:
nginx.org/<annoation_type> 要查看更多关于差异的信息,请访问这文档。
https://stackoverflow.com/questions/65243189
复制相似问题