什么是 Kubernetes?
Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化的应用程序。Kubernetes 提供了一个高度可扩展的平台,用于构建和运行云原生应用程序。
什么是 Ingress?
Ingress 是 Kubernetes 中的一种资源类型,用于将外部流量路由到 Kubernetes 群集的服务中。通过使用 Ingress,您可以将外部流量路由到 Kubernetes 服务,并使用各种规则指定如何将流量路由到不同的服务。
Ingress 可以将 HTTP 和 HTTPS 流量路由到 Kubernetes 服务。通过 Ingress,您可以配置各种路由规则,如主机名、请求路径、HTTP 方法和负载均衡设置等。
如何使用 Ingress?
在 Kubernetes 中,您可以使用 Ingress 控制器来处理 Ingress 资源。
Ingress 控制器是使用特定的软件或服务来实现 Ingress 资源规则的 Kubernetes 组件。控制器会监视 Ingress 资源,并将所述规则应用到群集的负载均衡器中。
Kubernetes 社区提供了多个 Ingress 控制器的实现。基于 Nginx、Traefik、HAProxy 等常见的开源软件提供了一些主流的 Ingress 控制器。每个 Ingress 控制器都有自己的优缺点。这里我们以 Nginx Ingress 控制器为例,介绍如何在 Kubernetes 环境下使用 Ingress。
在 Kubernetes 中使用 Nginx Ingress 控制器
在使用 Nginx Ingress 控制器之前,您需要在 Kubernetes 群集上安装它。安装 Nginx Ingress 控制器有两种方式:使用 Helm Charts 或使用 YAML 文件部署。
使用 Helm Charts 安装 Nginx Ingress 控制器
Helm 是 Kubernetes 的包管理器,使用 Helm Charts 模板可以轻松地安装和升级 Kubernetes 应用程序。
要使用 Helm 安装 Nginx Ingress 控制器,请执行以下步骤:
- 安装 Helm
请根据官方文档的说明安装 Helm。安装 Helm 的最简单方法是通过 Helm 的二进制发行版,可以从 Helm Releases 页面下载。
- 添加 Helm 仓库
您需要添加一个 Helm 仓库,以便从 Helm Charts 中获取 Nginx Ingress 控制器的最新版本:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update
- 执行 Helm 安装
您可以使用下面的命令运行 Helm 安装:
helm install nginx-ingress ingress-nginx/ingress-nginx
这将安装 Nginx Ingress 控制器,并在 Kubernetes 群集中创建相应的资源。
使用 YAML 文件安装 Nginx Ingress 控制器
如果您不想使用 Helm Charts,您可以使用 YAML 文件部署 Nginx Ingress 控制器。要使用 YAML 文件部署 Nginx Ingress 控制器,请执行以下步骤:
- 下载 YAML 文件
下载最新版本的 Nginx Ingress 控制器 YAML 文件:
curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.0/deploy/static/provider/cloud/deploy.yaml \ --output deploy.yaml
- 安装 Nginx Ingress 控制器
使用 kubectl
命令创建资源:
kubectl apply -f deploy.yaml
这将在 Kubernetes 群集中安装 Nginx Ingress 控制器。
配置 Ingress 路由
安装了 Nginx Ingress 控制器后,您就可以使用 Ingress 资源来配置路由规则。每个 Ingress 资源都由 spec.rules
定义。在规则中,您可以指定路由规则,例如:路由到哪个后端服务、用于匹配请求的主机名和路径等。在规则中,可以指定以下配置:
- 后端服务:定义 Ingress 路由规则的目标 Kubernetes 服务。
- 路径:定义要将传入请求路由到的 Kubernetes 服务的 HTTP 路径。
- 主机名:定义要将传入请求路由到的 Kubernetes 服务的域名。
- TLS:定义 HTTPS 加密的证书和密钥。
下面是 Ingress 资源的一个示例 YAML 配置:
-- -------------------- ---- ------- ----------- -------------------- ----- ------- --------- ----- ---------- ------------ ------------------------------------------- --- ----- ------ - ----- ----------- ----- ------ - ----- ----------- --------- ------ -------- -------- ----- ------------- ----- ----- ----
在此示例中,我们定义了一个名为 my-ingress
的 Ingress 资源。它定义了一条路由规则,将 HTTP 请求路由到 hello-service
应用程序(这是 Kubernetes 群集中的一个服务)的 /hello
路径。当请求进入 my-ingress
,将被重定向到 /hello
路径。以下是各参数含义:
spec.rules
:定义 Ingress 的路由规则。host
:定义请求需要匹配的主机名。http.paths
:定义 HTTP 请求的路径匹配和路由规则。path
:定义要路由到的路径。pathType
:定义路径的匹配类型。在此示例中,我们使用prefix
来精确匹配前缀为/hello
的路径。backend
:定义要将请求路由到的应用程序,包括名称和服务端口。
总结
本文介绍了 Kubernetes Ingress 和 Ingress 控制器的基本概念,并提供了 Nginx Ingress 控制器的示例。通过使用 Ingress,您可以轻松地将外部流量路由到 Kubernetes 群集中的服务,从而将应用程序部署和扩展带到一个新的水平。
参考
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64b0ab0148841e9894cc0287