惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
D
Docker
有赞技术团队
有赞技术团队
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
爱范儿
爱范儿
H
Help Net Security
美团技术团队
MyScale Blog
MyScale Blog
B
Blog RSS Feed
C
Check Point Blog
Microsoft Security Blog
Microsoft Security Blog
阮一峰的网络日志
阮一峰的网络日志
A
About on SuperTechFans
小众软件
小众软件
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
GbyAI
GbyAI
G
Google Developers Blog
月光博客
月光博客
Google DeepMind News
Google DeepMind News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Blog — PlanetScale
Blog — PlanetScale
MongoDB | Blog
MongoDB | Blog
F
Fortinet All Blogs

i4T

OpenClaw在Macmini下网络HTTPS_Proxy代理配置 | i4T 容器化部署OpenClaw授权View权限对Kubernetes集群进行巡检故障排查 | i4T 初试VictoriaLogs集群采集Kubernetes Pod日志 | i4T Kubernetes 部署Elasticsearch为WordPress提供文章搜索 | i4T Kubernetes使用Prometheus监控爱快路由器iKuai_Exporter | i4T RustDesk API集成Authentik ODIC单点登录 | i4T Kubernetes 部署RustDesk API实现专业版功能及管理Web UI | i4T 使用Kubernetes 快速部署RustDesk替换向日葵toDesk进行远程连接 | i4T Authentik 集成群晖Synology DSM 实现单点登录 | i4T Authentik 集成Kubernetes Grafana 实现SSO单点登录 | i4T Authentik 集成接入VMware vCenter 8.0.3实现ldP身份提供商登录 | i4T Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor | i4T 二进制Kafka_2.13-3.9.0集群开启并配置ACL用户授权 | i4T R730 ESXI 8.0平台PCI直通2080Ti 实现Windows远程游戏以及AI模型 | i4T Dell R730虚拟化ESXI8.0.3平台使用丽台Tesla V100配置vGPU | i4T Kubernetes使用HostAliases手动为容器Pod添加hosts解析 | i4T Nginx 使用resolver变量实现动态DNS解析配置 | i4T Kubernetes LoadBalancer负载均衡外部访问方案MetalLB | i4T Ubuntu环境下Docker Compose配置Harbor开机自启 | i4T Dell PowerEdge R730更新iDRAC8版本 | i4T Kubernetes部署RedisShake实现Redis哨兵异地灾备 | i4T Kubernetes部署开源Excalidraw实现在线绘图 | i4T Kubernetes部署DNSmgr聚合公网DNS多平台域名解析系统及SSL自续签 | i4T Kubernetes Grafana数据从Sqlite3迁移到MySQL | i4T 宝塔内网Nginx获取公网宝塔Nginx用户真实IP | i4T 基于Kubernetes Categraf SNMP插件采集Dell R730服务器硬件并使用Grafana监控 | i4T Kubernetes v1.29.9安装Grafana 12并开启匿名访问 | i4T Containerd 配置免费镜像加速源 | i4T Docker集成Containerd实现容器管理 | i4T
Kubernetes 1.29.0 部署配置Ingress-nginx-controller | i4T
https://i4t.com/users/auuAwtzuk · 2025-08-05 · via i4T

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