Kubernetes之Ingress Controller

本文详述了Kubernetes中使用Ingress Controller对外暴露服务的方式,重点介绍了Ingress Controller的作用、常见实现以及如何安装和配置。通过部署Nginx和Tomcat应用,展示了如何设置Ingress规则,实现域名到服务的映射,最后指导了如何配置域名并访问应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 简要介绍

1.1 K8S对外暴露服务的方式

  • 三种方式:k8s 集群向外暴露服务的方式一共有 NodePort, Ingress,LoadBalancer 这三种,每种方式都有各自的优缺点。

  • NodePort方式:这种方式是将K8S中的Pod或Service等资源的端口映射到主机上,从而在集群外部可以通过使用 主机IP:Port 的方式来访问Pod或Service,尽管这种方式使用起来比较简单,但并不适用于大量服务的情况,否则会导致主机上开的端口较多,不便于管理。

  • LoadBalancer方式:这种方式是结合云提供商的LB来使用,但是如果使用的LB较多,产生大量费用的问题也不容忽视。

  • Ingress方式:这种方式是K8S官方比较推荐的对外暴露服务的方式,也是在生产环境中使用较多的方式。

1.2 Ingress Controller

  • 简单介绍:Ingress Contoller 是一个 pod 服务,封装了一个 web 前端负载均衡器,同时在其基础上实现了动态感知 Ingress 的变化,并根据 Ingress 的定义动态生成前端 web 负载均衡器的配置文件。比如 Nginx Ingress Controller 本质上就是一个 Nginx,只不过它能根据 Ingress 资源的定义动态生成 Nginx 的配置文件,并且动态 Reload 配置文件。Ingress Controller 的作用是作为集群服务的统一入口,并根据路由转发规则将请求负载均衡地转发到各个服务。

  • 常见实现:Ingress Controller 有多种实现,除了常见的基于Nginx或基于Haproxy的实现之外,还有很多种其它的实现。

1.3 Ingress

  • 简单介绍:Ingress Controller作为集群服务的统一入口,用于把请求路由转发到对应的集群服务,但是它并不知道根据什么规则来进行路由转发,而 Ingress 就是用于定义转发规则的,Ingress 的转发规则类型也有多种,具体的转发规则请见官网介绍

2 安装Ingress Controller

2.1 部署Ingress Controller

  • 部署说明:本文中部署的是基于Nginx实现的Ingress Controller,即Nginx Ingress Controller。而Nginx Ingress Controller又分为Kurbernets官方维护的版本和Nginx官方维护的版本,这两者的区别请查看官网的说明,本文中部署的是Kubernetes官方维护的版本。Kubernetes官方维护的Nginx Ingress Controller的GitHub地址
  • 执行部署:Kubernetes官方提供了一份较为完善的 Nginx Ingress Controller部署文件示例, 用户可以在K8S集群的Master节点上执行以下命令,即可直接使用该部署文件来部署Nginx Ingress Controller,执行结果以及该部署文件的内容分别如下所示:
    # 部署命令
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
    
    在这里插入图片描述
    apiVersion: v1
    kind: Namespace
    metadata:
      name: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    
    ---
    
    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: nginx-configuration
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    
    ---
    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: tcp-services
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    
    ---
    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: udp-services
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: nginx-ingress-serviceaccount
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: ClusterRole
    metadata:
      name: nginx-ingress-clusterrole
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    rules:
      - apiGroups:
          - ""
        resources:
          - configmaps
          - endpoints
          - nodes
          - pods
          - secrets
        verbs:
          - list
          - watch
      - apiGroups:
          - ""
        resources:
          - nodes
        verbs:
          - get
      - apiGroups:
          - ""
        resources:
          - services
        verbs:
          - get
          - list
          - watch
      - apiGroups:
          - ""
        resource
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值