在 pfSense 后面公开 Kubernetes 集群

在 pfSense 后面公开 Kubernetes 集群

我在裸机服务器上安装了 Kubernetes 集群。

该服务器包含 Proxmox 虚拟机管理程序,我有以下虚拟机

  • pfSense(192.168.9.254)
  • Kubernetes 集群的两个主节点(192.168.9.11、192.168.9.12)
  • Kubernetes 集群的两个节点(192.168.9.21、192.168.9.22)

主服务器和节点均使用 CoreOS

我使用 Kubespray 配置了 Kubernetes 集群:

  • Kubernetes 版本:1.15.3 kubernetes
  • CNI Calico
  • CRI Docker

我成功安装MetalLB,我的配置如下

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.9.240/28

我还安装了nginx-ingress文件mandatory.yaml和一个简单的服务

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - name: http
      port: 80
      targetPort: http
    - name: https
      port: 443
      targetPort: http

然后我应用 yaml 文件来验证nginx-ingress是否正常工作

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 2
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  ports:
  - port: 80
    protocol: TCP
  selector:
    run: my-nginx
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-app-ingress
  annotations: 
     nginx.ingress.kubernetes.io/rewrite-target: /
     nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - http:
      paths:
      - path: /test
        backend:
          serviceName: my-nginx
          servicePort: 80

当我使用命令时kubectl get ingress,我得到了这个答案

NAME                   HOSTS                        ADDRESS         PORTS   AGE
nginx-app-ingress      *                            192.168.9.240   80      19h

连接到 VPN 后,我可以通过此 URL 访问简单的 nginx 服务器192.168.9.240/test

现在我希望能够从外界访问这个“网站”。

由于 Kubernetes 集群前面有 pfSense,我不确定该怎么做。

我正在考虑使用这样的反向代理:

  • 用户在 Web 浏览器中输入 myDomainName.com
  • 它重定向到 192.168.9.240/test

但我并不是真正确定这个解决方案,因为我不知道它是否是这个问题的最佳解决方案。

答案1

一种选择可能是在 PFSense 中设置 HAProxy。这将允许您通过外部 DNS URL 将流量引导到您的集群。我使用 cloudflare 作为我的 DNS,并设置了动态 DNS,因为我在 pfSense 中运行连接到 WAN 光纤的 dhcp。我有一篇关于此的文章这里

相关内容