5

我尝试在 k8s 中使用 haproxy 作为负载平衡和 haproxy-ingress 作为入口控制器。

我的负载平衡配置:

frontend MyFrontend_80
    bind    *:80
    bind    *:443
    mode    tcp
    default_backend         TransparentBack_https

backend TransparentBack_https
        mode                            tcp
        balance roundrobin
        option ssl-hello-chk
        server                  MyWebServer1 10.5.5.53
        server                  MyWebServer2 10.5.5.54
        server                  MyWebServer3 10.5.5.55

入口文件:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: li
  namespace: li
  annotations:
    # add an annotation indicating the issuer to use.
    cert-manager.io/cluster-issuer: "letsencrypt-staging"
    #haproxy.org/forwarded-for: true
    kubernetes.io/ingress.class: haproxy
    ingress.kubernetes.io/ssl-redirect: "true"
spec:
  rules:
  - host: a.b.c
    http:
      paths:
      - path: /storage
        backend:
          serviceName: li-frontend
          servicePort: 80
  tls:
  - hosts:
    - a.b.c
    secretName: longhorn-ui-tls

li-frontend 是一个仪表板 ui 服务。

当我在入口中将路径字段设置为空白时,一切正常。当路径字段设置为 /storage 或任何非空白值时,页面不正常。

我发现一些链接没有得到正确的位置,例如

requst             correct value
/main.js           /storage/main.js

我在 nginx-ingress 中找到了这个:

#nginx.ingress.kubernetes.io/configuration-snippet: |
#rewrite ^/main(.*)$ /storage/main$1 redirect;

haproxy-ingress 是否具有相同的功能?我尝试了这些,但没有效果:

ingress.kubernetes.io/app-root: /storage
ingress.kubernetes.io/rewrite-target: /storage

另外,我在nginx-ingress中使用rewrite,但是在websocket上不行。

对不起我的泳池英语。

4

1 回答 1

3

对于 HAProxy:

你必须使用 haproxy 注释:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: web-ingress
  namespace: default
  annotations:
    # replace all paths with /
    haproxy.org/path-rewrite: "/"

    # remove the prefix /foo... "/bar?q=1" into "/foo/bar?q=1"
    haproxy.org/path-rewrite: (.*) /foo\1

    # add the suffix /foo ... "/bar?q=1" into "/bar/foo?q=1"
    haproxy.org/path-rewrite: ([^?]*)(\?(.*))? \1/foo\2

    # strip /foo ... "/foo/bar?q=1" into "/bar?q=1"
    haproxy.org/path-rewrite: /foo/(.*) /\1
spec:
  # ingress specification...

参考:=> https://www.haproxy.com/documentation/kubernetes/1.4.5/configuration/ingress/

于 2020-12-17T16:53:12.170 回答