Ingress 路由进阶:单域名多 Path、多域名同服务与在线更新

来自AI助手的总结
介绍了Ingress的多路径、多域名路由及版本更新差异
Ingress 路由进阶:单域名多 Path、多域名同服务与在线更新

一、单域名匹配多 Path 到不同服务

一个扇出(fanout)配置根据请求的 HTTP URI 将来自同一 IP 地址的流量路由到多个 Service。 Ingress 允许你将负载均衡器的数量降至最低。例如,这样的设置:

单域名匹配同一IP流量到不同服务

针对上面设置,进行示例说明:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: simple-fanout-example
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /foo
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 4200
      - path: /bar
        pathType: Prefix
        backend:
          service:
            name: service2
            port:
              number: 8080

二、多域名匹配到相同服务

基于名称的虚拟主机支持将针对多个主机名的 HTTP 流量路由到同一 IP 地址上。例如,这样的设置:

多域名匹配到相同服务

针对上面设置,进行示例说明:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: name-virtual-host-ingress
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: service1
            port:
              number: 80
  - host: bar.foo.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: service2
            port:
              number: 80

说明:如果你创建的 Ingress 资源没有在 rules 中定义的任何 hosts,则可以匹配指向 Ingress 控制器 IP 地址的任何网络流量,而无需基于名称的虚拟主机。

三、更新 Ingress

更新Ingress可以直接使用kubectl edit进行更改,也可以通过kubectl apply/replace进行更改。

3.1 在线编辑更新

要更新现有的 Ingress可以通过编辑资源来对其进行更新:


$ k edit ingress ingress-name

3.2 YAML 文件更新

要更新现有的 Ingress可以通过编辑yaml文件来对其进行更新:


$ k replace/apply -f new-ingress.yaml

3.3 Ingress 接口变化解析

1.19 之前的 v1beta1

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: simple-fanout-example
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
    - host: foo.bar.com
      http:
        paths:
          - path: /foo
            pathType: Prefix
            backend:
              serviceName: service1
              servicePort: 80
          - path: /bar
            pathType: ImplementationSpecific
            backend:
              serviceName: service2
              servicePort: 8080

1.19之后的v1

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: name-virtual-host-ingress
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: service1
            port:
              number: 80

二者之间的区别:

特性 v1beta1 v1
API 版本 Kubernetes 1.19 之前,已弃用 Kubernetes 1.19 及之后,稳定版本
pathType 字段 不支持,默认为 Prefix 支持 Prefix、Exact、ImplementationSpecific
后端服务定义 serviceName 和 servicePort service.name 和 service.port.number
默认行为 宽松,默认路径匹配为 Prefix 严格,要求明确指定 pathType
兼容性 Kubernetes 1.19 之前 Kubernetes 1.19 及之后
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容