如何在Kubernetes环境中使用HAProxy作为入口控制器

Kubernetes是任何希望自动化容器化应用程序部署、扩展和管理的人的理想选择。在Kubernetes环境中,入口控制器对于管理对任何Kubernetes集群服务的外部访问至关重要。入口控制器充当外部流量的入口空间,允许您定义路由以及希望如何控制到服务的流量。您可以使用不同的入口控件,但对于本例,我们将重点关注HAProxy,并使用它来实现我们在入口资源中定义的规则。

什么是入口控制器?

入口控制器是一个组件,它允许用户管理和控制Kubernetes集群内服务的访问。入口控制器有两个关键元素:

  1. 入口资源——这是一个Kubernetes API对象,它定义了基于指定主机名和路径路由集群中服务流量的规则。
  2. 入口控制器—是一个软件组件,如HAProxy、Traefik或NGINX,它实现在入口资源中指定的规则。它将负载平衡器配置为基于对入口对象所做的更改来处理流量。

如何在Kubernetes环境中使用HAProxy作为入口控制器

了解了什么是入口控制器以及为什么需要它之后,下一个任务是介绍使用它的步骤。对于我们的示例,我们按照提供的步骤将HAProxy设置为入口控制器。

N/B:确保你的Kubernetes集群已经启动并运行。然后,按如下步骤进行。

步骤1:启动Kubernetes集群

设置和启动Kubernetes集群有不同的方法。在本指南中,我们使用Minikube。它是一个工具,提供了一种在虚拟机或Docker中部署Kubernetes的简单方法,特别是如果您的机器本地有Kubernetes的话。

请参阅Minikube文档,了解要在您的平台上使用的安装命令。在这种情况下,我们运行一个稳定的“x64”Linux架构,并运行以下命令:

$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

安装minikube-linux-amd64 /usr/local/bin/minikube

第一个命令获取最新的稳定Minikube二进制文件,而第二个命令安装二进制文件并将其移动到指定的路径中。

安装Minikube之后,启动它来启动集群。

$ minikube start

然后必须安装kubectl才能访问集群。但是,您可以使用Minikube提供的kubectl版本。例如,要查看正在运行的pod的详细信息,可以执行“kubectl”命令如下:

$ minikube kubectl - get pods -A

这样,您就不需要安装kubectl。(-)表示这些命令用于kubectl,而不是Minikube。

步骤2:创建名称空间

第二步涉及为入口控制器创建专用的名称空间。我们将命名空间命名为“haproxy-controller”。

创建命名空间haproxy-controller

步骤3:创建并部署HAProxy入口控制器

如何创建入口控制器取决于您想要实现的目标。例如,您可以创建一个HAProxy入口控制器来根据请求的主机名路由HTTP流量。对于这种情况,首先访问DNS服务器并创建“a”记录,将目标主机名映射到集群。

有了正确的“A”记录后,创建入口控制器YAML文件,如下图所示。在第一部分中,我们创建了一个Deployment资源,它使用“jmalloc/echo-server”Docker容器映像作为示例。

在YAML文件的第二部分中,我们创建了Service资源,该资源根据在步骤4中创建的入口控制器中请求的主机名进行映射。

保存该文件并使用kubectl将其部署到集群中。在本例中,我们通过运行以下命令来引用Minikube kubectl。我们的HAProxy入口控制器是“linuxhint-jmaildeployment.yaml”。

$ minikube kubectl——apply -f

一旦您得到一个显示服务已经创建的输出,您可以使用以下命令进一步验证它是否已经部署:

$ minikube kubectl——get pods——namespace haproxy-controller

确保使用在步骤1中创建的正确名称空间。您将得到一个确认服务可用的输出,这意味着部署成功了。

步骤4:创建并部署入口资源

创建另一个YAML文件,作为入口资源,其中包含HAProxy应该如何路由流量的规则。确保使用正确的目标域名(主机),并调整命名和所需端口以接受传入的流量。

保存HAProxy入口资源文件,并像我们对控制器所做的那样部署它。

$ minikube kubectl——apply -f

我们将入口资源命名为“linuxhint-ingresscontroller.yaml”。

就是这样!使用以下命令,您可以通过检查分配给NodePort的端口来验证HAProxy入口控制器是否正常工作。

$ minikube kubectl——get service haproxy-kubernetes-ingress——namespace haproxy-controller

对于本例,它被分配了端口32448。您可以通过该端口访问已创建的服务并查看其状态。

这样,您就可以在Kubernetes环境中使用HAProxy作为入口控制器。

结论

入口控制器允许您根据入口资源文件中定义的规则来定义如何处理到集群的流量。HAProxy是一个可靠的入口控制器,可以在Kubernetes集群中使用,本文介绍了使用它应该遵循的步骤。尝试一下并享受使用HAProxy作为您的入口控制器的乐趣。