kubernetes - 是否可以通过 Kubernetes Controller 节点提供应用程序?

标签 kubernetes k3s

我在一组 Raspberry Pi4 计算机上构建了一个 K3s ( https://k3s.io ) 集群。

Controller (ctrl-1) 节点是一个网关,因为它有 2 个网络接口(interface)。一个连接到我的 LAN,另一个连接到它创建的网络,例如K3S-局域网。两个节点( node-1node-2 )部署到 K3S-LAN。

我希望能够通过 ctrl-1 访问节点上运行的应用程序,例如从局域网。这是因为这个集群是可移植的,所以只有 ctrl-1节点需要连接到访客 LAN。 (是的,DNS 名称等问题需要解决,但我想先运行基础知识)。

这意味着我需要能够通过ctrl-1“代理”入口。 .我认为我对此有正确的想法,因为我使用 Helm 将“nginx-ingress”部署到 master。但是我忘记了这个服务 - 这已经安排在节点上,而它需要在 Controller 上以便打开端口(我认为)。但是我找不到如何使服务在 Controller 上运行。

目前,我的服务类型为 NodePort .我可以安装 MetalLB 以便拥有 LoadBalancer能力。但是,根据我所看到的,我不确定这是否有帮助。
ctrl-1没有任何污点设置,只是主人的角色。

我在这里吠错树了吗?我想这可能不是 Kubernetes 的预期用例,但我正在玩一个想法。感谢人们的任何想法。

更新*

我刚刚想到解决这个问题的方法可能是在 ctrl-1 上运行 HAProxy (作为主机上的另一个服务)并设置规则以代理到集群中的必要服务。这将充当网络之间的桥梁。

最佳答案

  • 您只需通过 Nodeport 类型的服务公开您的 pod,即可通过 http://master-node-ip:nodeport 访问它.确保 kube-proxy 正在所有主节点和工作节点上运行。
  • 只要您的主服务器上运行 kube-proxy,入口方法也应该有效。您在集群上部署 nginx 入口,它将被部署到工作节点中。然后,您可以使用 NodePort 服务公开 nginx 入口 Controller 本身。在此之后,您可以创建用于配置 nginx 入口 Controller 的入口资源,以将流量路由到在工作节点上运行的后端 pod 和服务。后端 pod 的服务应该是 ClusterIP 类型。

  • 部署 nginx 入口 Controller 并使用 kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.27.1/deploy/static/provider/baremetal/service-nodeport.yaml 通过 NodePort 服务公开它

    部署 nginx pod(以 nginx 为例..这应该是你的 pod)kubectl run nginx --generator=run-pod/v1 --image=nginx
    通过 ClusterIP 服务公开 nginx pod
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        run: nginx
      name: nginx-service
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        run: nginx
    

    创建入口资源
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata: 
      name: mycha-ingress
      annotations:
        kubernetes.io/ingress.class: "nginx"
    spec:
      rules:
      - http:
          paths:
            - path: /
              backend:
                serviceName: nginx-service
                servicePort: 80
    

    通过以上设置,我现在可以访问 nginx 并通过 http://master-node-ip:NodePort of nginx ingress controller 获得“欢迎使用 nginx!”

    关于kubernetes - 是否可以通过 Kubernetes Controller 节点提供应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59917732/

    相关文章:

    azure - 使用 NodePort 访问 azure kubernetes 集群

    kubernetes - 使用 kubectl run 的多节点选择器

    kubernetes - 检查容器资源消耗

    kubernetes - 如何在不使用引号的情况下使用 k8s Ansible 模块?

    kubernetes - 将 k3s 流量转发到主机

    azure - 使用K3s时如何从Azure容器注册表中提取图像?

    kubernetes - kubectl - 未知授权机构签署的错误 x509 证书

    docker - k8s : make local image accessible for k8s

    Nginx入口 Controller 未提供Prometheus指标