目 录CONTENT

文章目录

k8s | 深入理解资源对象 Ingress

如风
2023-07-17 / 0 评论 / 0 点赞 / 25 阅读 / 665 字

k8s | 深入理解资源对象 Ingress

继续将k8s比做一个公司,Ingress就像该公司的大门。正如公司的大门是外部访问公司内部的入口一样,Ingress充当了Kubernetes集群内服务的外部访问入口。也可以将 Ingress 类比成 Nginx

Ingress 公开了从集群外部到集群内 services 的访问路由,Ingress 是一个规则的集合,它允许集群外的流量通过一定的规则到达集群内的 Service,Ingress 可以给 service 提供集群外部访问的 URL、负载均衡、SSL 终止、HTTP 路由

出现的原因

​ LoadBalance 需要对外暴露端口,不安全,并且无法根据域名路径转发到不同的service,多个service需要多个LoadBalance,无法配置https

核心组件

  • ingress

    是一个类型为Ingress的k8s api对象,一般用yaml配置,作用是定义请求如何转发到service的规则,可以理解为配置模板

    定义了域名与service的对应关系

  • ingress-controller

    kubernetes API 进行交互,实时的感知后端 service、pod 等变化

    Ingress Controller 再结合下文的 Ingress 生成配置,然后更新反向代理负载均衡器,并刷新其配置,实现动态服务发现与更新

  • 反向代理负载均衡器

    即常见的负载均衡软件,如 nginx、Haproxy 等

类型

根据 Ingress Spec 配置的不同,Ingress 可以分为以下几种类型

单服务 Ingress

单服务 Ingress 即该 Ingress 仅指定一个没有任何规则的后端服务。可以通过设置 Service.Type=NodePort 或者 Service.Type=LoadBalancer 来对外暴露。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
spec:
  backend:
    serviceName: testsvc
    servicePort: 80

多服务 Ingress

路由到多服务的 Ingress 即根据请求路径的不同转发到不同的后端服务上

foo.bar.com -> 178.91.123.132 -> / foo    s1:80
                                 / bar    s2:80
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /foo
        backend:
          serviceName: s1
          servicePort: 80
      - path: /bar
        backend:
          serviceName: s2
          servicePort: 80

虚拟主机 Ingress

虚拟主机 Ingress 即根据名字的不同转发到不同的后端服务上,而他们共用同一个的 IP 地址

foo.bar.com --|                 |-> foo.bar.com s1:80
              | 178.91.123.132  |
bar.foo.com --|                 |-> bar.foo.com s2:80
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - backend:
          serviceName: s1
          servicePort: 80
  - host: bar.foo.com
    http:
      paths:
      - backend:
          serviceName: s2
          servicePort: 80

参考链接

0

评论区