kubenetes从入门到上天系列第二十篇:Kubernetes安装Nginx ingress controller

一:Ingress资源清单文件解读

属性名称 取值类型 取值说明
apiVersion string Api 版本。通常为 networking.k8s.io/v1
kind string 资源类型。通常为 Ingress
metadata Object 元数据
metadata.name String 控制器的名称
metadata.namespace String 控制器所属的命名空间,默认值为 default
metadata.labels[] List 自定义标签列表
metadata.annotation[] List 自定义注解列表
spec Object 规范 Ingress 所需行为的规范
属性名称 取值类型 取值说明
spec.defaultBackend Object defaultBackend 是 Ingress 规范中的一个参数,用于指定没有匹配到任何规则的请求该发送到哪个后端服务。该参数是可选的,如果没有设置,则请求会被丢弃,或者返回一个指定的 HTTP 响应代码,例如 404。这个后端服务可以是一个已经存在的 Service 或 Deployment,也可以是自定义的资源对象。只能指定一个。
spec.defaultBackend.resource Object 指定后端服务为 Deployment 等,也可以是自定义的资源对象。
属性名称 取值类型 取值说明
spec.defaultBackend.resource.apiGroup string 指定对应资源的 apiGroup
spec.defaultBackend.resource.kind string 指定资源的类型
spec.defaultBackend.resource.name string 指定对应资源的名称
spec.defaultBackend.service Object 指定后端服务为 Service
spec.defaultBackend.service.name string 指定后端服务 Service 的名称
spec.defaultBackend.service.port Object 指定后端服务 Service 的端口
属性名称 取值类型 取值说明
spec.ingressClassName string 在 Kubernetes Ingress 规范中,ingressClassName 参数是一个可选项,用于指定 Ingress 控制器应该使用哪个类别或类型来处理该规范。该参数与 Kubernetes 平台定义的 Ingress 类型分离,它允许多个 Ingress 控制器在同一个集群中共存并彼此独立地处理网络流量。例如:使用 Nginx Ingress Controller 时,可指定该值为 nginx
属性名称 取值类型 取值说明
spec.rules []Object spec.rules 参数是一个列表,用于定义请求的入口规则。每个规则对应一个 Ingress 请求的入口点,定义了该规则的转发行为。根据规则定义的主机名和 URL 路径,将请求转发到相应的后端服务或工作负载。
spec.rules.host string spec.rules.host 参数指定了一个主机名,该规范将应用于该主机名匹配的所有 Ingress 请求。具体而言,当该参数与请求中的主机名匹配(通常是客户端请求的主机名或 DNS 名称)时,请求将被转发到该规范所定义的后端服务或工作负载中。
spec.rules.http Object http 参数定义了使用 HTTP 协议的入口规则。每个 http 对象定义一个或多个 URL 路径,以及将路径请求转发到的后端服务或工作负载。同时,可以在 http 对象中配置多个端口和主机名。
spec.rules.http.paths []Object spec.rules.http.paths 参数定义了 URL 路径,并指定了这些路径应该如何转发到相应的后端服务或工作负载。
属性名称 取值类型 取值说明
spec.rules.http.paths.backend Object 在 Kubernetes Ingress 规范中,backend 参数用于定义将 Ingress 请求转发到的后端服务或工作负载。这个后端服务可以是一个已经存在的 Service 或 Deployment,也可以是自定义的资源对象。只能指定一个。
spec.rules.http.paths.backend.resource Object 指定后端服务为 Deployment 等,也可以是自定义的资源对象。
spec.rules.http.paths.backend.service Object 指定后端服务为 Service。
spec.rules.http.paths.path string 在 Kubernetes Ingress 规范中,path 参数定义了 URL 路径,用于匹配客户端请求的路径,并将符合条件的请求转发到对应的后端服务。
属性名称 取值类型 取值说明
spec.tls []Object tls 参数用于配置 Ingress 中用于 TLS 通信的证书和私钥。
spec.tls.hosts []string 一个字符串数组,列出将使用此证书的主机名。必填项。
spec.tls.secretName string 包含 TLS 密钥的 Kubernetes Secret 的名称。Secret 必须包括 tls.crttls.key 字段。必须与证书匹配的 TLS 证书密钥。必填项。

二:Ingress PathType匹配类型

ingress.spec.rules.http.paths.pathType 是 Ingress 资源中非常重要的路径匹配类型概念,每个路径都必须明确设置该类型,否则无法通过合法性检查。当前支持三种路径类型:

  • Prefix(前缀匹配) 当请求路径以 Path 定义的值开头时,就会匹配。例:Path: /example/example/foo/example/bar 都会匹配。

  • Exact(完全匹配) 只有当请求路径与 Path 定义的值完全一致 时,才会匹配。例:Path: /example → 只有 /example 会匹配。

  • ImplementationSpecific(实现特定匹配) 匹配逻辑由具体的 IngressClass 决定,不同 Ingress 控制器(如 Nginx、Traefik)可能有不同实现;可以作为独立类型处理,也可与 PrefixExact 逻辑保持一致。

这个第三个用的很少,基本上不用,特别负载,还没有啥收益。

三:Ingress的策略配置技巧

为了实现灵活的负载分发策略,Ingress可以按照多种方式进行配置,下面面对常见的Ingress转发策略进行说明

1:转发到单个后端服务

基于这种设置,客户端到 Ingress Controller 的访问请求都将被转发到后端的唯一 Service 上,在这种情况下 Ingress 无须定义任何 rule。

通过如下所示的设置,对 Ingress Controller 的访问请求都将被转发到 tomcat:8080 这个服务上。

复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-myapp
  namespace: default
spec:
  ingressClassName: nginx
  rules:
  - host: tomcat.zyf.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: tomcat
            port:
              number: 8080

2:同一域名下,不同的URL路径被转发到不同的服务上

这种配置常用于一个网站通过不同的路径提供不同服务的场景,例如 /web 表示访问 Web 页面,/api 表示访问 API 接口,对应到后端的两个服务,通过 Ingress 的设置很容易就能将基于 URL 路径的转发规则定义出来。

通过如下所示的设置,对 tomcat.zyf.com/web 的访问请求将被转发到 web-service:80 服务上;对 tomcat.zyf.com/api 的访问请求将被转发到 api-service:80 服务上。

复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-myapp
  namespace: default
spec:
  ingressClassName: nginx
  rules:
  - host: tomcat.zyf.com
    http:
      paths:
      - path: /web
        pathType: Prefix
        backend:
          service:
            name: web-service
            port:
              number: 80
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 8081

3:不同的域名(虚拟主机名)被转发到不同的服务上

这种配置常用于一个网站通过不同的域名或虚拟主机名提供不同服务的场景,例如 nginx.web1.com 域名由 service1 提供服务,nginx.web2.com 域名由 service2 提供服务。

通过如下所示的设置,对 "nginx.web1.com" 的访问请求将被转发到 "service1:80" 服务上,对 "nginx.web2.com" 的访问请求将被转发到

复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-myapp
  namespace: default
spec:
  ingressClassName: nginx
  rules:
  - host: nginx.web1.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80
  - host: nginx.web2.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service2
            port:
              number: 80

4:主机通配符

主机名可以是精确匹配(例如 "foo.bar.com")或者使用通配符来匹配(例如 "*.foo.com")。精确匹配要求 HTTP host 头部字段与 host 字段值完全匹配。通配符匹配则要求 HTTP host 头部字段与通配符规则中的后缀部分相同。

复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-myapp
  namespace: default
spec:
  ingressClassName: nginx  # 指定使用的 IngressClass
  rules:
    # 规则1:精确匹配域名
    - host: "nginx.web1.com"
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service1
                port:
                  number: 80  # 后端Service端口
    # 规则2:通配符匹配域名(匹配所有 *.web2.com)
    - host: "*.web2.com"
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service2
                port:
                  number: 80  # 后端Service端口
相关推荐
lpfasd1232 小时前
Kubernetes UI 管理全景指南
ui·容器·kubernetes
我不听你讲话2 小时前
Nginx 的安全防护策略与HTTPS 部署
nginx·安全·https
00后初来乍到2 小时前
Docker 搭建 LNMP(Nginx+PHP+MySQL)完整踩坑实录
nginx·docker·php
灰阳阳3 小时前
Spring Boot+Nginx+MySQL容器化实战
spring boot·mysql·nginx
人生匆匆3 小时前
配置nginx ssl反向代理tcp端口
tcp/ip·nginx·ssl
zzh0813 小时前
Nginx性能优化与监控笔记
笔记·nginx·性能优化
weixin_397578023 小时前
Docker 完整介绍
运维·docker·容器
小璐资源网3 小时前
《Nginx缓存配置:浏览器缓存与服务器缓存实战》
服务器·nginx·缓存
炸炸鱼.3 小时前
Nginx 性能调优与深度监控实战指南
运维·nginx