K8s的ingress资源


Ingress控制器

image-20240925143511518

1)[AKS 应用网关Ingres控制器] 使用 Azure应用程序网关启用AKS集群ingress。

2)mbassador API网关,一个基于Envoy的Ingress控制器,有着来自社区的支持和来自Datawire的商业支持。

3)AppsCode Inc 为最广泛使用的基于HAproxy的Ingress控制器Voyager提供自持和维护。

4)AWS ALB Ingress控制器,通过AWS应用Load Balancer启用Ingress。

5)Contour是一个基于Envoy的Ingress控制器,它由VMware提供和支持。

6)Citrix为其硬件(MPX),虚拟化(VPX)和免费容器化(CPX)ADC提供了一个Ingress控制器,用于裸金属和云部署。

7)F5 Networks为用于Kubernetes的F5 BIG-IP控制器提供支持和维护。

8)Gloo是一个开源的基于Envoy的Ingress控制器,它提供了API网关功能,有着来自solo.io的企业级支持。

9)HAproxy Ingress是HAproxy高度可定制的、由社区驱动的Ingress控制器。

10)HAproxy Technologies为用于Kubernetes的HAproxy Ingress控制器提供支持和维护,具体信息请参考官方文档。

11)基于Istio的ingress控制器,控制Ingress流量。

12)Kong为用于Kubernetes的Kong Ingress控制器提供社区或商业支持和维护。

14)Nginx 为用于Kubernetes的Nginx Ingress控制器提供支持和维护

15)Traefik(小蜜蜂)是一个全功能的Ingress控制器。(Let's Encrypt,secrets,http2,websocket)并且它也有Traefik Labs的商业支持

image-20240924172447212

1.没有ingress之前,pod对外提供服务只能通过NodeIP:NodePort的形式,但是这种形式有缺点,一个节点上的PORT不能重复利用。比如某个服务占用了80,那么其他服务就不能在用这个端口了。
2.NodePort是4层代理,不能解析7层的http,不能通过域名区分流量
3.为了解决这个问题,我们需要用到资源控制器叫Ingress,作用就是提供一个统一的访问入口。工作在7层
4.虽然我们可以使用nginx/haproxy来实现类似的效果,但是传统部署不能动态的发现我们新创建的资源,必须手动修改配置文件并重启。
5.适用于k8s的ingress控制器主流的有nginx-ingress、traefik、haproxy-ingress

了使Nginx Ingress资源正常工作,集群中必须要有个Nginx Ingress Controller来解析Nginx Ingress的转发规则。Nginx Ingress Controller收到请求,匹配Nginx Ingress转发规则转发到后端Service所对应的Pod,由Pod处理请求。Kubernetes中Service、Nginx Ingress与Nginx Ingress Controller有着以下关系:

  • Service是后端真实服务(可以理解为具体的pod)的抽象,一个Service可以代表多个相同的后端服务。
  • Nginx Ingress是反向代理规则,用来规定HTTP/HTTPS请求应该被转发到哪个Service所对应的Pod上。例如根据请求中不同的Host和URL路径,让请求落到不同Service所对应的Pod上。
  • Nginx Ingress Controller是一个反向代理程序(可以理解为套了壳的nginx),负责解析Nginx Ingress的反向代理规则。如果Nginx Ingress有增删改的变动,Nginx Ingress Controller会及时更新自己相应的转发规则,当Nginx Ingress Controller收到请求后就会根据这些规则将请求转发到对应Service的Pod上。

Nginx Ingress Controller通过API Server获取Ingress资源的变化,动态地生成Load Balancer(例如Nginx)所需的配置文件(例如nginx.conf),然后重新加载Load Balancer(例如执行nginx -s load重新加载Nginx)来生成新的路由转发规则。

image-20240925143016168

部署nginx-ingress

点击下载修改完成版

#### 下载资源清单
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/deploy.yaml -O nginx-ingress.yaml

修改 Depoloument 资源 改成 DaemonSet 等等。。。。
修改 images为nginx/nginx-ingress:1.7.2

ingress的资源清单的解释

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: wordpress-ingress

spec:
  rules:
    - host: www.wp.com
      http:
        paths:
          - path: /
            pathType: ImplementationSpecific
            backend:
              service:
                name: wp-svc
                port:
                  number: 80
apiVersion: networking.k8s.io/v1    # 指定 API 版本
kind: Ingress                       # 资源类型是 Ingress
metadata:                           # 元数据部分
  name: wordpress-ingress           # Ingress 的名称

spec:                               			# 规范部分
  rules:                            			# 规则部分
    - host: www.wp.com                     		 # 指定主机名为 'wp'
      http:                        				# HTTP 规则部分
        paths:                     				# 路径配置
          - path: /                				# 匹配根路径
            pathType: ImplementationSpecific  	 # 路径类型
            backend:               				# 后端服务配置
              service:            			 	# 指定后端服务
                name: wp-svc       				# 服务名称为 'wp-svc'
                port:               			# 指定服务的端口
                  number: 80        			# 端口号为 80