• 关于博主
  • 网站监控
  • 认证平台
  • 文档
  • Docker免费镜像代理加速
  • 文章归档
文章
文章用户商铺文档圈子
Image
Image
Image

{{userData.name}}已认证

文章

评论

关注

粉丝

¥{{role.user_data.money}}
{{role.user_data.credit}}
您已完成今天任务的
  • 私信列表所有往来私信

  • 财富管理余额、积分管理

  • 账户注销自助注销账户

    NEW
  • 任务中心每日任务

    NEW
  • 成为会员购买付费会员

  • 认证服务申请认证

    NEW
  • 小黑屋关进小黑屋的人

    NEW
  • 我的订单查看我的订单

  • 我的设置编辑个人资料

  • 进入后台管理

Image
×
  • 首页
  • 交流
  • 动态
  • shop
  • k8s文档
  • Ops工具
    • 群晖NAS
    • 虚拟化
    • Linux
    • Nginx
    • Tomcat
    • PHP
    • Shell
    • SaltStack
    • Jumpserver
    • Shadowsocks
    • WordPress
  • 云原生
    • APISIX
    • Ceph
    • istio
    • Kubernetes
    • Openstack
    • Docker
    • Jenkins
    • ELKStack
  • 监控
    • Prometheus
    • Zabbix
    • Nagios
    • Grafana
  • 数据库
    • Clickhouse
    • MySQL
    • Oracle
    • Redis
Image

Kubernetes 1.29.0 部署配置Ingress-nginx-controller

  • Kubernetes NGINX
  • 25年8月5日
  • 编辑
Image
新闻联播老司机运维小弟
释放双眼,带上耳机,听听看~!

文章目录

Toggle
  • Ingress-nginx-controller原理
  • 其它Ingress-controller
  • Ingress-nginx 环境部署
  • Ingress-nginx 镜像及参数说明
  • Nginx测试
  • Ingress-Nginx 配置说明

Ingress-nginx-controller原理

ingress Controller 连接到其中一个 Pod 的流程,客户端首先对nginx.frps.cn执行DNS 解析,得到Ingress Controller 所在节点的 IP,然后客户端向Ingress Controller 发送 HTTP请求,然后根据 Ingress对象里面的描述匹配域名,找到对应的Service对象,并获取关联的Endpoints列表,将客户端的请求转发给其中一个 Pod

https://github.com/kubernetes-retired/contrib/issues/1140

Kubernetes 1.29.0 部署配置Ingress-nginx-controller

其它Ingress-controller

  • AKS 应用程序网关入口控制器是一个配置Azure 应用程序网关的入口控制器。
  • 阿里云 MSE Ingress是配置阿里云原生网关的入口控制器,也是Higress的商业版本。
  • Apache APISIX 入口控制器是一个基于Apache APISIX的入口控制器。
  • Avi Kubernetes Operator使用VMware NSX Advanced Load Balancer提供 L4-L7 负载平衡。
  • BFE Ingress Controller是一个基于BFE的入口控制器。
  • Cilium Ingress Controller是一个由Cilium提供支持的入口控制器。
  • Citrix 入口控制器与Citrix 应用程序交付控制器配合使用。
  • Contour是一个基于Envoy的入口控制器。
  • Emissary-Ingress API Gateway 是一个基于Envoy的入口控制器。
  • EnRoute是一个基于Envoy的 API 网关,可以作为入口控制器运行。
  • Easegress IngressController是一个基于Easegress的 API 网关,可以作为入口控制器运行。
  • 适用于 Kubernetes 的F5 BIG-IP容器入口服务 让您可以使用入口来配置 F5 BIG-IP 虚拟服务器。
  • FortiADC Ingress Controller支持 Kubernetes Ingress 资源,并允许您从 Kubernetes 管理FortiADC 对象
  • Gloo是一个基于Envoy 的开源入口控制器,提供 API 网关功能。
  • HAProxy Ingress是HAProxy的入口控制器 。
  • Higress是一个基于Envoy的 API 网关,可以作为入口控制器运行。
  • Kubernetes 的 HAProxy Ingress Controller也是 HAProxy 的入口控制器。
  • Istio Ingress 是一个基于Istio的入口控制器。
  • Kubernetes 的 Kong Ingress Controller是一个驱动Kong Gateway 的 入口控制器。
  • Kusk Gateway是一个基于Envoy的 OpenAPI 驱动的入口控制器。
  • Kubernetes 的 NGINX Ingress Controller与NGINX Web 服务器(作为代理) 协同工作。
  • ngrok Kubernetes Ingress Controller是一个开源控制器,用于使用ngrok 平台为您的 K8s 服务添加安全的公共访问。
  • OCI Native Ingress Controller是 Oracle 云基础设施的 Ingress 控制器,可让您管理OCI 负载均衡器。
  • OpenNJet Ingress Controller是一个基于OpenNJet的入口控制器。
  • Pomerium Ingress Controller基于Pomerium,提供上下文感知的访问策略。
  • Skipper HTTP 路由器和反向代理用于服务组合,包括 Kubernetes Ingress 等用例,设计为构建自定义代理的库。
  • Traefik Kubernetes Ingress 提供程序是Traefik代理的入口控制器。
  • Tyk Operator通过自定义资源扩展了 Ingress,为 Ingress 带来了 API 管理功能。Tyk Operator 可与开源 Tyk Gateway 和 Tyk Cloud 控制平面配合使用。
  • Voyager是HAProxy的入口控制器 。
  • Wallarm Ingress Controller是一个提供 WAAP(WAF)和 API 安全功能的 Ingress Controller。

如果需要其它Ingress-Controller,可以通过创建Ingress下面参数调整

spec:
  ingressClassName: nginx

Ingress-nginx 环境部署

创建Ingress命名空间,存放Ingress-nginx控制器

Ingress控制器可以创建多个用于不同项目使用,默认官方使用ingress-nginx命名空间

kubectl create ns ingress-nginx

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.13.0/deploy/static/provider/cloud/deploy.yaml -n ingress-nginx

#代理地址下载
kubectl apply -f https://d.frps.cn/file/kubernetes/ingress/v1.13.0/deploy.yaml -n ingress-nginx
#建议下载到本地,后续方便修改

由于网络问题
可以使用我保存的镜像导入,只针对v1.13.0
wget https://d.frps.cn/file/kubernetes/ingress/v1.13.0/ingress_v1.13.0.tar && docker load -i ingress_v1.13.0.tar

Ingress-nginx 镜像及参数说明

root@k8s-master-01:~/ingress# kubectl get pod -n ingress-nginx
NAME                                        READY   STATUS              RESTARTS   AGE
ingress-nginx-admission-create-fdfph        0/1     Completed     0          3m28s
ingress-nginx-admission-patch-xpm6c         0/1     Completed     0          3m28s
ingress-nginx-controller-6b4d45d6f4-zpgg9   1/1     Running   0          3m28s

上面Deploy镜像包含3个Pod,作用如下

  • ingress-nginx-admission-create-fdfph
  • ingress-nginx-admission-patch-xpm6c
  • ingress-nginx-controller-6b4d45d6f4-zpgg9

ingress-nginx-controller-admission 是为准入控制器提供服务的,当我们创建不合要求的 Ingress 对象后就会直接被拒绝了,另外一个 ingress-nginx-controller 就是 ingress 控制器对外暴露的服务,我们可以看到默认是一个 LoadBalancer 类型的 Service

root@k8s-master-01:~/ingress# kubectl get svc -n ingress-nginx
NAME                                 TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.96.2.123   <pending>     80:32399/TCP,443:30223/TCP   47m
ingress-nginx-controller-admission   ClusterIP      10.96.1.160   <none>        443/TCP                      47m

root@k8s-master-01:~/ingress# kubectl get sa -n ingress-nginx
NAME                      SECRETS   AGE
default                   0         42m
ingress-nginx             0         42m
ingress-nginx-admission   0         42m

检查服务状态

root@k8s-master-01:~/ingress# kubectl get svc -n ingress-nginx
NAME                                 TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.96.2.123   <pending>     80:32399/TCP,443:30223/TCP   10m
ingress-nginx-controller-admission   ClusterIP      10.96.1.160   <none>        443/TCP                      10m
root@k8s-master-01:~/ingress#
root@k8s-master-01:~/ingress# kubectl get pod -n ingress-nginx
NAME                                        READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-5c59dc64d9-kkcgg   1/1     Running   0          11m

Ingress-Nginx会创建一个Ingressclass,如果我们需要使用多个Ingress代理,这里可以创建多个Ingressclass

root@k8s-master-01:~/ingress# kubectl get ingressclass
NAME    CONTROLLER             PARAMETERS   AGE
nginx   k8s.io/ingress-nginx   <none>       51m

Kubernetes 1.29.0 部署配置Ingress-nginx-controller

Nginx测试

编辑nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ingress-nginx-demo
spec:
  selector:
    matchLabels:
      app: ingress-nginx-demo
  template:
    metadata:
      labels:
        app: ingress-nginx-demo
    spec:
      containers:
        - name: ingress-nginx-demo
          image: nginx
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx-demo
  labels:
    app: ingress-nginx-demo
spec:
  ports:
    - port: 80
      protocol: TCP
      name: http
  selector:
    app: ingress-nginx-demo
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx-demo
  namespace: default
spec:
  ingressClassName: nginx #使用nginx的IngressClass(关联的 ingress-nginx 控制器)这里也可以关联其它控制器
  rules:
    - host: nginx.frps.cn  #将域名映射到ingress-nginx-demo服务
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service: #将所有请求发送到ingress-nginx-demo服务的80端口
                name: ingress-nginx-demo
                port:
                  number: 80

Ingress控制器通过Service来获取后端的Endpoints列表,直接转发到Pod

创建测试NGINX

root@k8s-master-01:~/ingress# kubectl apply -f nginx-test.yaml
deployment.apps/ingress-nginx-demo created
service/ingress-nginx-demo created
ingress.networking.k8s.io/ingress-nginx-demo created

上面创建了deployment、svc、Ingress,接下来检查状态

root@k8s-master-01:~/ingress# kubectl get pod |grep nginx
ingress-nginx-demo-65d68f5484-qszqx       1/1     Running   0               92s

root@k8s-master-01:~/ingress# kubectl get svc |grep nginx
ingress-nginx-demo   ClusterIP   10.96.3.76   <none>        80/TCP    100s

root@k8s-master-01:~/ingress# kubectl get ingress
NAME                 CLASS   HOSTS           ADDRESS   PORTS   AGE
ingress-nginx-demo   nginx   nginx.frps.cn             80      107s
  • Mac 添加host解析
➜  ~ sudo vim /etc/hosts
192.168.21.14  nginx.frps.cn

访问测试

ingress-nginx svc端口为32399,需要访问添加32399端口

root@k8s-master-01:~# kubectl get svc -n ingress-nginx
NAME                                 TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.96.2.123   <pending>     80:32399/TCP,443:30223/TCP   125m
ingress-nginx-controller-admission   ClusterIP      10.96.1.160   <none>        443/TCP                      125m

内部访问测试

在集群内部使用nodeport方式访问

curl -H "Host: nginx.frps.cn" http://192.168.21.13:32399
>集群内部所有网络均可以正常访问

Kubernetes 1.29.0 部署配置Ingress-nginx-controller

浏览器访问

浏览器需要使用Pod所在节点的nodeport访问

查看Ingress所在pod节点

通常清空下,Ingress只会在边缘节点进行部署安装,如果我们需要在所有节点上都开启Ingress访问,只需要在配置文件中添加

hostNetwork=true
#或者我们将Pod设置为6个,平均分布在每一台节点

这里我采用边缘节点访问

root@k8s-master-01:~/ingress# kubectl get pod -n ingress-nginx -o wide
NAME                                        READY   STATUS    RESTARTS   AGE   IP           NODE            NOMINATED NODE   READINESS GATES
ingress-nginx-controller-5c59dc64d9-t9vgd   1/1     Running   0          25m   10.0.2.253   k8s-master-02   <none>           <none>

访问k8s-master-02
Kubernetes 1.29.0 部署配置Ingress-nginx-controller

Kubernetes 1.29.0 部署配置Ingress-nginx-controller

Ingress-Nginx 配置说明

如果想多Ingress新增额外的配置,可以在全局配置文件,或者Ingress配置添加

  • 全局修改

全局修改通过configmap定义

root@k8s-master-01:~/ingress# kubectl edit cm -n ingress-nginx ingress-nginx-controller
#新增下方配置
data:
  access-log-path: /var/log/nginx/nginx_access.log
  error-log-path: /var/log/nginx/nginx_error.log
  log-format-upstream: $remote_addr - $remote_user [$time_iso8601] $msec "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_length $request_time [$proxy_upstream_name] [$proxy_alternative_upstream_name] [$upstream_addr] [$upstream_response_length] [$upstream_response_time] [$upstream_status] $req_id
  keep-alive-requests: "10000"
  max-worker-connections: "65536"
  upstream-keepalive-connections: "200"

检查生效情况

root@k8s-master-01:~/ingress# kubectl get cm -n ingress-nginx ingress-nginx-controller -o yaml
apiVersion: v1
data:
  access-log-path: /var/log/nginx/nginx_access.log
  error-log-path: /var/log/nginx/nginx_error.log
  keep-alive-requests: "10000"
  log-format-upstream: $remote_addr - $remote_user [$time_iso8601] $msec "$request"
    $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_length $request_time
    [$proxy_upstream_name] [$proxy_alternative_upstream_name] [$upstream_addr] [$upstream_response_length]
    [$upstream_response_time] [$upstream_status] $req_id
  max-worker-connections: "65536"
  upstream-keepalive-connections: "200"
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","data":null,"kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"controller","app.kubernetes.io/instance":"ingress-nginx","app.kubernetes.io/name":"ingress-nginx","app.kubernetes.io/part-of":"ingress-nginx","app.kubernetes.io/version":"1.13.0"},"name":"ingress-nginx-controller","namespace":"ingress-nginx"}}
  creationTimestamp: "2025-08-04T01:35:15Z"
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.13.0
  name: ingress-nginx-controller
  namespace: ingress-nginx
  resourceVersion: "11044446"
  uid: 7e6ed62f-d861-491e-b9a5-dd12f1d967a9

到Ingress-nginx-controller中,已经可以看到配置生效
Kubernetes 1.29.0 部署配置Ingress-nginx-controller

进入到Ingress-nginx-controller下面/var/log/nginx已经可以看到我们引用的配置文件
Kubernetes 1.29.0 部署配置Ingress-nginx-controller

  • Ingress 独立域名配置

如果不想全局生效,可以针对独立Ingress新增配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx-demo
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true" ##指定后面rules定义的path可以使用正则表达式
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "600" ##连接超时时间,默认为5s
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600" ##后端服务器回转数据超时时间,默认为60s
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600" ##后端服务器响应超时时间,默认为60s
    nginx.ingress.kubernetes.io/proxy-body-size: "50m" ##客户端上传文件,最大大小,默认为20m
spec:
  ingressClassName: nginx #使用nginx的IngressClass(关联的 ingress-nginx 控制器)
  rules:
    - host: nginx.frps.cn  #将域名映射到ingress-nginx-demo服务
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service: #将所有请求发送到ingress-nginx-demo服务的80端口
                name: ingress-nginx-demo
                port:
                  number: 80

检查是否生效

root@k8s-master-01:~/ingress# kubectl describe ingress ingress-nginx-demo
Name:             ingress-nginx-demo
Labels:           <none>
Namespace:        default
Address:
Ingress Class:    nginx
Default backend:  <default>
Rules:
  Host           Path  Backends
  ----           ----  --------
  nginx.frps.cn
                 /   ingress-nginx-demo:80 (10.0.3.69:80)
Annotations:     nginx.ingress.kubernetes.io/proxy-body-size: 50m
                 nginx.ingress.kubernetes.io/proxy-connect-timeout: 600
                 nginx.ingress.kubernetes.io/proxy-read-timeout: 600
                 nginx.ingress.kubernetes.io/proxy-send-timeout: 600
                 nginx.ingress.kubernetes.io/use-regex: true
Events:
  Type    Reason  Age                From                      Message
  ----    ------  ----               ----                      -------
  Normal  Sync    47m                nginx-ingress-controller  Scheduled for sync
  Normal  Sync    47m                nginx-ingress-controller  Scheduled for sync
  Normal  Sync    47m                nginx-ingress-controller  Scheduled for sync
  Normal  Sync    47m                nginx-ingress-controller  Scheduled for sync
  Normal  Sync    94s (x2 over 47m)  nginx-ingress-controller  Scheduled for sync

相关文章:

  1. [NGINX] – 配置文件优化 – NGINX.CONF
  2. Kubernetes Dashboard 设置用户密码登陆
  3. Kubernetes 服务发现
  4. Kubernetes 可视化管理工具Kuboard V3

给TA打赏
共{{data.count}}人
人已打赏
  • Image
ingressKubernetesnginx
KubernetesRedis

Kubernetes部署RedisShake实现Redis哨兵异地灾备

2025-7-23 0:55:22

KubernetesNGINX

Kubernetes LoadBalancer负载均衡外部访问方案MetalLB

2025-8-5 23:24:03

猜你喜欢

[NGINX] – 配置文件优化 – NGINX.CONF

17年2月22日01.3k

Kubernetes Dashboard 设置用户密码登陆

19年5月20日127.5k

Kubernetes 服务发现

20年2月3日23.3k

Kubernetes 可视化管理工具Kuboard V3

22年3月17日23.8k
1 条回复 A文章作者 M管理员

您必须登录或注册以后才能发表评论

Image
Image
  1. Image
    Kubernetes LoadBalancer负载均衡外部访问方案MetalLB | i4T Guest
    25年8月5日

    […] https://i4t.com/25699.html […]

欢迎投稿

                       Image

关于作者

Image

新闻联播老司机

Image SVIP+

文章

473

评论

1168

关注

0

粉丝

189
[文章] 初试VictoriaLogs集群采集Kubernetes Pod日志
[文章] Kubernetes 部署Elasticsearch为WordPress提供文章搜索
[文章] Kubernetes使用Prometheus监控爱快路由器iKuai_Exporter
[文章] RustDesk API集成Authentik ODIC单点登录
Ta的全部动态

浏览历史

清空
  • Image
暂无浏览历史

标签云

APISIX (5) Authentik (5) ceph (23) clickhouse (2) Containerd (10) Dell r730 (9) DNS (4) Docker (30) docker-compose (4) ELKStack (9) error (56) es (4) gitlab (2) grafana (18) Harbor (4) ingress (3) jenkins (11) jumpserver (3) kafka (19) Kubernetes (97) KVM (3) linux (32) Linux命令大全 (278) Mac (3) mysql (26) nginx (36) OpenStack (7) OpenVPN (4) oracle (3) other (4) php (5) prometheus (24) Python (4) rabbitmq (4) rancher (2) redis (12) RustDesk (3) shell (7) svn (3) Ubuntu (10) VMware ESXI (12) WordPress (5) zabbix (24) 漏洞 (3) 群晖 (36)
❯
Image

解锁会员权限

开通会员

解锁海量优质VIP资源

立刻开通

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
  • Image

    扫码打开当前页

  • Image

    运维博客公众号

返回顶部
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分

今日签到

连续签到

  • Image

    {{item.credit}}
  • Image

    连续{{item.count}}天
查看所有
我的优惠劵
  • ¥优惠劵
    使用时效:无法使用
    使用时效:

    之前

    使用时效:永久有效
    优惠劵ID:
    ×
    限制以下商品使用: 限制以下商品分类使用: 不限制使用:
    Image
    [{{ct.name}}]
    所有商品和商品类型均可使用
没有优惠劵可用!

购物车
  • Image
    ×
    删除
购物车空空如也!

清空购物车 前往结算
您有新的私信
没有新私信
  • Image

写新私信 查看全部

关于我们

Image

abcdocker是分享DevOps、自动化运维、Kubernetes、Docker等运维优秀实践经验个人博客,由系统运维、脚本编程、devops以及资源分享等分类组成,涵盖了DevOps、自动化运维

联系与合作

  • Image

    优惠活动

    查看本站的最新优惠

  • Image

    配件商城

    在线购买XX配件

  • Image

    法律声明

    本站的法律声明

  • Image

    在线工单

    提交在线工单

  • Image

    建议提交

    查看本主题的文档

随机文章

没有任何内容

我们的团队

  • 新闻联播老司机
Copyright © 2026 i4T
・京ICP备16034840号-2
查询 39 次,耗时 0.5332 秒
首页专题认证
搜索菜单我的
NEW
特斯拉V100 智能助理×
本机器助手只回答博客已有内容!
Advertisement