侧边栏壁纸
  • 累计撰写 45 篇文章
  • 累计创建 15 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

【kubernetes】Ingress

Administrator
2024-12-01 / 0 评论 / 0 点赞 / 20 阅读 / 3393 字 / 正在检测是否收录...

Ingress用于集群外部到集群内部Service的HTTP和HTTPS路由,可以配置提供服务外部访问的URL、负载均衡和终止SSL,并提供基于域名的虚拟主机。

1. 使用域名发布 K8s 的服务

创建一个 web 服务:

kubectl create deploy nginx-ingress --image=registry.cn-beijing.aliyuncs.com/jiangxiaonan/nginx:1.22.1

暴露服务:

kubectl expose deploy nginx-ingress --port 80

创建 Ingress:

apiVersion: networking.k8s.io/v1 # k8s >= 1.22 必须 v1
kind: Ingress
metadata:
  name: nginx-ingress
spec:
  ingressClassName: nginx
  rules:
  - host: nginx.test.com  # 域名
    http:
      paths:
      - backend:
          service:
            name: nginx-ingress
            port:
               number: 80
        path: /
        pathType: ImplementationSpecific
  • path:域名的location配置,同一个host可以配置多个path。比如一个路径格式为xxx.com/abc,可以配置path为/abc,每个路径都有一个对应的backend,对应到应用的Servcie和Port。

  • pathType: 路径的匹配方式,目前有 ImplementationSpecific、 Exact 和 Prefix 方式

  • Exact: 精确匹配,比如配置的 path 为/bar,那么/bar/将不能被路由;

  • Prefix: 前缀匹配,基于以 / 分隔的 URL 路径。比如 path 为/abc,可以匹配到/abc/bbb 等,比较常用的配置;

  • ImplementationSpecific:这种类型的路由匹配根据 Ingress Controller 来实现,可以当做一个单独的类型,也可以当做 Prefix 和 Exact。ImplementationSpecific是 1.18 版本引入 Prefix 和 Exact 的默认配置;

  • backend:描述Servcie和Port的组合,对Ingress匹配主机和路径的HTTP与HTTPS请求将被发送到对应的后端。

2. 单域名

apiVersion: networking.k8s.io/v1 # k8s >= 1.22 必须 v1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 4200
        path: /foo
      - backend:
          serviceName: service2
          servicePort: 8080
        path: /bar

访问foo.bar.com/foo到service1的4200,访问foo.bar.com/bar到service2的8080。

3. 多域名

apiVersion: networking.k8s.io/v1 # k8s >= 1.22 必须 v1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 4200
  - host: bar.foo.com
    http:
      paths:
      - backend:
          serviceName: service2
          servicePort: 8080

此时,访问foo.bar.com到service1,访问bar.foo.com到service2。

0
博主关闭了所有页面的评论