东东's Blog

东东's Blog

马上订阅 东东's Blog RSS 更新: https://blog.yasking.org/atom.xml

K8S 基础知识:Nginx Ingress Controller 初体验

2023年8月8日 21:00

K8S 集群对外暴露服务有三种方式:LoadBlancer、NodePort、Ingress

LoadBlancer 依托于云服务提供的负载均衡,这个我还未验证,暂且跳过,NodePort 在之前测试时有用到过(在 K8S 运行多 Pods 负载均衡服务(Hello World)),NodePort 方式使用简单、便于测试,但是难以满足多样化的业务转发需求。

Ingress 功能强大,本篇使用 Ingress 来暴露服务,初探 Ingress

先行概念

什么是 Ingress?

Ingress 定义了流量路由规则,用于管理外部用户对 Kubernetes 集群内服务的访问,有了 Ingress,你就能轻松设置流量路由规则,它通过将 URL 映射到服务来实现这一点。

什么是 Ingress Controller?

Ingress Controller 负责通过读取和处理 Ingress 资源中的规则,将请求路由到 Kubernetes 集群中的相应服务。

Ingress 工作位置

(图例来自:Ingress Configuration)

Ingress 概念由两部分组成,其一是 Ingress 定义的 “转发规则”,另外是借助 Ingress Controller 实现功能,Ingress Controller 也是 K8S 中的 Service 实体,作为服务的服务运行(所以一般部署在单独的命名空间)

这么说来,Ingress Controller 不正是一个提供反向代理的 “Nginx” 吗?

这么理解没什么问题,Ingress 相当于对配置文件进行了抽象,当 Ingress 更新后,Ingress Controller 会从 K8S 获取到配置更新,而后自动 Reload 加载配置,Ingress 模式在设计时充分考虑到业务、场景的复杂性,所以定义了 Ingress 规则,而 Ingress Controller 以扩展方式集成,用户可以根据自己的需要选择或者开发适合自己的 Ingress Controller

目前常用的 Ingress Controller 有基于 Nginx 的两个版本 —— Kubernetes Ingress Nginx 和 Nginx NGINX Ingress Controller,从活跃度来看,前者 Kubernetes 版参与开发讨论的人更多,另外还有 HAproxy、Traefik Ingress Controller 和 Kong Ingress Controller,本篇基于 Kubernetes Ingress Nginx 进行测试。

注意事项

  1. 参考各种教程时,较早的 api 版本使用的是 extensions/v1beta1,而最新的(1.27)K8S 应该使用 networking.k8s.io/v1,注意替换。
  2. 参考本文时,假设你已经有一个可以正常访问的 Service,参考:在 K8S 运行多 Pods 负载均衡服务(Hello World)

安装 Kubernetes NGINX Ingress Controller

$ wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml

补充:这个地址来自于 Kubernetes 的 ingress-nginx 仓库(Kubernetes/ingress-nginx),进入后首先切换 Tag,搜索 "controller",出现的 Tag 选择最新的,而后点击进入「deploy 目录」-「static 目录」-「provider 目录」,里面有 cloudaws 等针对不同环境适配的部署脚本,进入 baremetal 目录(因为我这里是手动部署的 K8S,所以选择裸金属),点击 deploy.yaml 文件并查看...

剩余内容已隐藏

查看完整文章以阅读更多