十一 【Kubernetes】K8s笔记:Ingress 集群进出流量总管( 二 )


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 文档中有两个关键字段 ingressClassNamerulesrules 的格式稍显复杂:它将路由规则拆散为 hosthttp 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
十一 【Kubernetes】K8s笔记:Ingress 集群进出流量总管

文章插图
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 。

经验总结扩展阅读