Haproxy 入口控制器

Haproxy ingress controller

我已经通过 helm 安装了入口控制器作为守护进程。我已经配置入口如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: webapp-ingress
  namespace: rcc
  annotations:
    haproxy.org/check: 'true'
    haproxy.org/check-http: /serviceCheck
    haproxy.org/check-interval: 5s
    haproxy.org/cookie-persistence: SERVERID
    haproxy.org/forwarded-for: 'true'
    haproxy.org/load-balance: leastconn
    kubernetes.io/ingress.class: haproxy
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: webapp-frontend
                port:
                  number: 8080
kubectl get ingress -n rcc
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
NAME            CLASS    HOSTS                    ADDRESS          PORTS   AGE
webapp-ingress   <none>   example.com   10.110.186.170   80      11h

选择的类型是负载均衡器。 我可以从任何节点 ping 端口 80 上入口的 IP 地址,也可以很好地卷曲它。我也可以从节点浏览任何入口 pods ip 地址就好了。但是当我浏览节点 ip o 端口 80 时,连接被拒绝。我在这里遗漏了什么吗?

我使用 helm 安装了最后一个 haproxy ingress 版本 0.13.4

默认安装 LoadBalancer 服务类型:

$ kubectl get svc -n ingress-haproxy

NAME              TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
haproxy-ingress   LoadBalancer   10.102.166.149   <pending>     80:30312/TCP,443:32524/TCP   3m45s

由于我有相同的 kubeadm 集群,EXTERNAL-IP 将处于待处理状态。正如您在问题中正确提到的那样,当使用 kubeadm.

设置集群时,节点上可以访问 CLUSTER-IP

有两种方法可以访问您的入口:

  1. 使用NodePort

从上面的输出中有一个 NodePort 30312 用于内部暴露的端口 80。因此,从集群外部应该通过 Node_IP:NodePort:

访问它
curl NODE_IP:30312 -IH "Host: example.com"
HTTP/1.1 200 OK
  1. 设置metallb:

关注installation guide and second step is to configure metallb. I use layer 2。注意分配未使用的 ip 范围!

在我安装并设置 metallb 之后,我的 haproxy 现在有 EXTERNAL-IP

$ kubectl get svc -n ingress-haproxy

NAME              TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)                      AGE
haproxy-ingress   LoadBalancer   10.102.166.149   172.16.1.241   80:30312/TCP,443:32524/TCP   10m

现在我可以通过端口 80:

上的 EXTERNAL-IP 访问入口
curl 172.16.1.241 -IH "Host: example.com"
HTTP/1.1 200 OK

阅读有用: