【问题标题】:AWS ec2 instances clusters and ingress controllerAWS ec2 实例集群和入口控制器
【发布时间】:2021-03-31 03:47:20
【问题描述】:

我有一个 非 EKS AWS kubernetes 集群,其中包含 1 个主节点 3 个工作节点

我正在尝试安装 nginx 入口控制器,以便使用具有域名的集群,但不幸的是它似乎不起作用,nginx 入口控制器服务 是没有自动获取 IP,即使我手动设置了外部 IP,此 IP 也不会在 80 端口中应答。

【问题讨论】:

  • 如果您有任何适用于您的 k8s 部署和入口配置的 AWS 驱动程序,您能分享一下吗?如果你只有一个“普通”的 k8s,aws 不一定允许taking automatically an IP
  • @gusto2 谢谢你的回答,不,我的部署没有任何特殊的驱动程序我已经设置了一个带有 flannel 插件的 k8s 集群
  • 只是为了明确一点-您正在使用 kubeadm 在云引导中运行 kubernetes 集群,并且您想在外部公开您的应用程序?
  • @MariuszK。是的,我有 3 个 EC2 实例在同一个子网中我已经使用 kubeadm 正确配置了它们的服务,但是后端和前端服务只能访问 ADDRESS_IP:PORT

标签: amazon-web-services kubernetes nginx-ingress


【解决方案1】:

如果您正在寻找公共领域。将 nginx-ingress 部署(服务)公开为将创建 ALB 的负载均衡器。 然后,您可以将域名路由到 R53 中的 ALB 别名

【讨论】:

  • 您的意思是通过服务公开为负载均衡器吗?
  • 最好在本节中写下您的评论答案好吧,我将尝试公开 nginx-ingress 控制器部署。在那之后 ?我必须应用入口 yaml 集群吗?
  • 看你将部署一个 nginx 入口控制器。然后将部署公开为类型为 =loadbalancer 的服务。所以现在你的入口可以公开访问了。要公开应用特定的自定义端点,请将其添加为入口规则。希望我清楚
【解决方案2】:

是的,您必须将部署公开为服务 kubectl 暴露部署 {deploymentname} -n ns ==type=Loadbalancer --name={name}

【讨论】:

    【解决方案3】:

    External IP 仍处于待处理状态的原因是您的集群前面没有负载均衡器来为其提供外部 IP,就像 EKS 一样。您可以通过使用kubeadm 使用--cloud-provider 选项来提升集群来实现它。

    您可以按照这些教程来了解如何成功实现它:

    Kubernetes, Kubeadm, and the AWS Cloud Provider

    Setting up the Kubernetes AWS Cloud Provider

    Kubernetes: part 2 — a cluster set up on AWS with AWS cloud-provider and AWS LoadBalancer

    【讨论】:

    • 谢谢你,我会试试你的解决方案
    【解决方案4】:

    有几种不同的解决方案。我最喜欢的解决方案是

    • 使用像 ingress-nginx 这样的 Ingress Controller(Kubernetes 有多种不同的 Ingress Controller 可用,提供了很好的比较here

    • 将 IngressController 服务配置为使用 NodePort 并使用类似 30080 的端口

    • 以 Terraform 创建自己的 AWS ALB 为例,并将 NodePort 30080 添加到 TargetGroup

    • 创建一个 Ingress 资源来配置 IngressController

    整个交通流可能是这样的:

    如果您仍有问题,请在此处提问 :)

    【讨论】:

      猜你喜欢
      • 2021-12-02
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多