美文网首页
Kubernetes学习笔记--Ingress

Kubernetes学习笔记--Ingress

作者: 木子一酱 | 来源:发表于2020-10-30 15:18 被阅读0次

    Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP。

    将 Ingress 配置为服务提供外部可访问的 URL、负载均衡流量、终止 SSL/TLS,以及提供基于名称的虚拟主机等能力。

    Ingress公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。

    如一个将所有流量都发送到同一 Service 的简单 Ingress 示例:


    image.png

    Ingress 不会公开任意端口或协议。 将 HTTP 和 HTTPS 以外的服务公开到 Internet 时,通常使用 Service.Type=NodePort 或 Service.Type=LoadBalancer 类型的服务。

    Ingress 资源

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: minimal-ingress
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      rules:
      - http:
          paths:
          - path: /testpath
            pathType: Prefix
            backend:
              service:
                name: test
                port:
                  number: 80
    
    

    创建了 Ingress 之后,可以通过kubectl describe ingress 查看

    Ingress 类型

    • 由单个 Service 来完成的 Ingress
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: test-ingress
    spec:
      defaultBackend:
        service:
          name: test
          port:
            number: 80
    
    

    使用 kubectl apply -f 创建此 Ingress,则应该能够查看刚刚添加的 Ingress 的状态:

    kubectl get ingress test-ingress
    
    NAME           CLASS         HOSTS   ADDRESS         PORTS   AGE
    test-ingress   external-lb   *       203.0.113.123   80      59s
    
    • 简单扇出
      一个扇出(fanout)配置根据请求的 HTTP URI 将来自同一 IP 地址的流量路由到多个 Service。 Ingress 允许你将负载均衡器的数量降至最低。例如,这样的设置:


      image.png
    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 地址上。


      image.png
    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

    查看ingress:

    kubectl describe ingress test
    

    编辑ingress:

    kubectl edit ingress test
    

    替代方案

    不直接使用 Ingress 资源,也可以使用其他方法暴露 Service,如:

    • 使用 Service.Type=LoadBalancer
    • 使用 Service.Type=NodePort

    相关文章

      网友评论

          本文标题:Kubernetes学习笔记--Ingress

          本文链接:https://www.haomeiwen.com/subject/eipcmktx.html