Kubernetes 用户可以转向管理 Ingress Class,用它来定义不同的业务逻辑分组,简化 Ingress 规则的复杂度 。比如说,我们可以用 Class A 处理博客流量、Class B 处理短视频流量、Class C 处理购物流量 。这些 Ingress 和 Ingress Controller 彼此独立,不会发生冲突 。
3. 使用 YAML 描述 Ingress / Ingress Class首先用命令 kubectl api-resources 查看它们的基本信息:
NAMESHORTNAMESAPIVERSIONNAMESPACEDKINDingressclassesnetworking.k8s.io/v1falseIngressClassingressesingnetworking.k8s.io/v1trueIngress*Ingress Controller 是一个处理流量的应用程序,稍后可以使用 Deployment 和 DaemonSet 来部署
3.1 IngressIngress 可以使用 kubectl create 来创建样板文件,它需要用两个附加参数:
--class- 指定 Ingress 从属的 Ingress Class 对象
--rule- 指定路由规则,基本形式是URI=Service,也就是说是访问 HTTP 路径就转发到对应的 Service 对象,再由 Service 对象转发给后端的 Pod
$ export out="--dry-run=client -o yaml"$ kubectl create ing ngx-ing --rule="ngx.test/=ngx-svc:80" --class=ngx-ink $outapiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: ngx-ingspec:ingressClassName: ngx-inkrules:- host: ngx.testhttp:paths:- backend:service:name: ngx-svcport:number: 80path: /pathType: Exact这份 YAML 文档中有两个关键字段 ingressClassName 和 rules,rules 的格式稍显复杂:它将路由规则拆散为 host 和 http path,在 path 里又指定了路径的匹配方式,可以是精确匹配 Exact 或者是前缀匹配 Prefix,再用 backend 来指定转发的目标 Service 对象 。3.2 Ingress ClassIngress Class 本身并没有什么实际的功能,只是起到联系 Ingress 和 Ingress Controller 的作用,所以它的定义非常简单,在
spec 里只有一个必需的字段 controller ,表示要使用哪个 Ingress Controller,具体的名字就要看实现文档了 。比如,要使用 Nginx 开发的 Ingress Controller,那么就要用名字
nginx.org/ingress-controller:apiVersion: networking.k8s.io/v1kind: IngressClassmetadata:name: ngx-inkspec:controller: nginx.org/ingress-controller
文章插图
4. 使用 Ingress / Ingress Class使用
kubectl apply 创建 Ingress 和 Ingress Class 这两个对象:$ kubectl apply -f ngx-ing-class.yamlingressclass.networking.k8s.io/ngx-ink created$ kubectl apply -f ngx-ing.yamlingress.networking.k8s.io/ngx-ing created然后我们查看 Ingress 和 Ingress Class 的状态:$ kubectl get ingress -o wideNAMECLASSHOSTSADDRESSPORTSAGEngx-ingngx-inkngx.test8067s$ kubectl get ingressclass -o wideNAMECONTROLLERPARAMETERSAGEngx-inknginx.org/ingress-controller<none>84s可以使用 kubectl describe 查看详细的信息:$ kubectl describe ing ngx-ingName:ngx-ingLabels:<none>Namespace:defaultAddress:Ingress Class:ngx-inkDefault backend:<default>Rules:HostPathBackends----------------ngx.test/ngx-svc:80 (10.10.1.38:80,10.10.1.40:80,10.10.1.41:80)Annotations:<none>Events:<none>可以看到 Ingress 对象的路由规则 Host/Path 就是在 YAML 里设置的域名 ngx.test/ 。5. 使用 Ingress Controller准备好了 Ingress 和 Ingress Class,接下来就需要部署真正处理路由规则的 Ingress Controller 。
Nginx Ingress Controller 以 Pod 的形式运行在 Kubernetes 里,同时支持 Deployment 和 DaemonSet 两种部署方式 。我们现在根据 Nginx Ingress Controller Installation Docs 部署 Nginx Ingress Controller 。
经验总结扩展阅读
- 2023年农历五月十九搬家乔迁好不好
- 2023年农历八月十九宜洗澡吗 2023年10月3日洗澡好不好
- 我的世界里怎么骑马(我的世界怎样骑马)
- 2024年九月初四出生江姓女孩名字叫什么好名字推荐
- 张姓男孩名字2024年10月5日出生的生辰八字五行查询
- 2023年2月7日出海打鱼吉日一览表 2023年2月7日出海打鱼好吗
- 大白菜从什么时候开始有的
- 西甲硅油功效作用是什么?
- iPhone15系列电池容量曝光 苹果或告别128GB存储吗
- 老九门点天灯是第几集?
