0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文透析Nginx-ingress 控制器如何实现的

Linux爱好者 来源:掘金 作者: dakesolo 2021-09-01 14:44 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

主机nginx

一般nginx做主机反向代理(网关)有以下配置

upstream order{

server 192.168.1.10:5001;

server 192.168.1.11:5001;

}

server {

listen 80;

server_name order.example.com;

access_log /var/log/nginx/order.example.com-access.log;

error_log /var/log/nginx/order.example.com-error.log;

location / {

proxy_pass_header Server;

proxy_set_header Host $http_host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Scheme $scheme;

proxy_pass http://order;

}

}

复制代码

其中192.168.1.10:5001,192.168.1.10:5001我们把他们称为Endpoint,就是所谓的具体的服务,比如order订单服务。

pod nginx-ingress

nginx-ingress也是一种代理,是一个pod,外部的数据统一经过(必经)这个pod,然后通过该pod内部的nginx方向代理到各各服务(Endpoint)。nginx-ingress是ingress控制器插件的一种,这些插件有很多,比如istio-ingressgateway。

1、Pod

nginx-ingress pod有两个功能,controller和nginx:

controller:和kubernetes api通讯实时更新nginx配置(就是ingress yaml资源了)

nginx:正常的反向代理

复制代码

与主机nginx的区别是,该pod nginx-ingress是运行在pod里。主机在定义反向代理配置文件时,需要监听一个对外开放的端口,比如上边的80端口。那么pod中的nginx端口是如何配置的呢?我们在github上找到了nginx-ingress的deployment.yaml

https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

复制代码

其中一段

apiVersion: apps/v1

kind: Deployment

metadata:

name: nginx-ingress-controller

namespace: ingress-nginx

labels:

app.kubernetes.io/name: ingress-nginx

app.kubernetes.io/part-of: ingress-nginx

spec:

replicas: 1

selector:

matchLabels:

app.kubernetes.io/name: ingress-nginx

app.kubernetes.io/part-of: ingress-nginx

template:

metadata:

labels:

app.kubernetes.io/name: ingress-nginx

app.kubernetes.io/part-of: ingress-nginx

annotations:

prometheus.io/port: “10254”

prometheus.io/scrape: “true”

spec:

# wait up to five minutes for the drain of connections

terminationGracePeriodSeconds: 300

serviceAccountName: nginx-ingress-serviceaccount

containers

- name: nginx-ingress-controller

image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1

。。。

。。。

。。。

ports:

- name: http

containerPort: 80

- name: https

containerPort: 443

复制代码

我们看到

- name: http

containerPort: 80

- name: https

containerPort: 443

复制代码

默认对外监听了两个端口80和443,也就是说,有这两个端口对外就可以web服务了。

2、ingress 资源

ingress 资源通过yaml进行管理的,比如以下:

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

name: order

spec:

rules:

- host: order.example.com

http:

paths: /

backend:

serviceName: order

servicePort: 80

复制代码

以上我们定义了一个单一规则的ingress,该pod(nginx-ingress)接收到外部所有的请求,将被发送到内部order服务的80端口上。接下来我们看pod(nginx-ingress)如何把ingress资源转化为该pod中的nginx反向代理配置文件

upstream order{

server order:80;

}

server {

listen 80;

server_name order.example.com;

。。。

。。。

location / {

proxy_pass_header Server;

proxy_set_header Host $http_host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Scheme $scheme;

proxy_pass http://order; # 对应ingress 资源 name: order

}

}

复制代码

当然ingress如果包含https,那么会转化nginx对应的443端口及证书的配置文件内容,这里就不写了。

那么,单一个规则的ingress资源代理多个服务(比如order服务,product服务)或者多个ingress资源文件如何转化为nginx配置?猜测,其实就是转化成了多个

upstream order{

server order:80;

}

复制代码

当然,被转化的nginx配置文件要比这些复杂的多,据说还是用lua脚本写的,灵活如openresty。

3、nginx-ingress对外提供服务

一般来讲,pod直接对外提供服务就只有两种方式:

create一个service,该service暴漏nodePort

forward 映射

我们一般采用第一种。nginx-ingress也是一个pod,所以,为了能使外部通过该pod代理访问,还需要nginx-ingress对外提供一个nodePort的service。这个service这里也不再写了。

4、nginx-ingress工作流程

我们可以看到,因为nginx-ingress这个pod做了所有service的代理,在高并发情况下将承受巨大压力,我们可以增加多个pod实例。

来源:掘金 - dakesolo

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 主机
    +关注

    关注

    0

    文章

    1073

    浏览量

    36883
  • 代码
    +关注

    关注

    30

    文章

    4982

    浏览量

    74514
  • nginx
    +关注

    关注

    0

    文章

    200

    浏览量

    13240

原文标题:Nginx-ingress 控制器到底怎样实现的,这篇文章教你看明白了

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Nginx典型配置错误复盘与优化

    Nginx 是互联网生产环境中使用最广泛的反向代理和 Web 服务。不管是做静态资源服务、API 网关,还是负载均衡器,Nginx 几乎是标准配置。很多运维工程师日常和它打交道,
    的头像 发表于 05-12 09:40 350次阅读

    如何使用控制器实现龙门同步?

    实现龙门同步主要有三种技术路线,选择哪种取决于你使用的控制器和精度要求。下面我将为你逐介绍,并列出各自的优缺点和适用场景。 ▲CRT-DMC2600ML 方案类型 核心原理 优缺点 适用场景 指令
    的头像 发表于 04-22 12:05 107次阅读
    如何使用<b class='flag-5'>控制器</b><b class='flag-5'>实现</b>龙门同步?

    Nginx的限流机制深度解析

    很多运维工程师对 Nginx 的认知停留在"反向代理"和"负载均衡",但实际上 Nginx 在安全防护方面也相当强大——限流可以防止 CC 攻击和 API 滥用,黑白名单可以精准控制访问来源,基础安全配置可以防护常见的 Web
    的头像 发表于 04-10 16:40 771次阅读

    Kubernetes Ingress Controller对比解析

    Kubernetes集群对外提供服务时,Ingress是标准的服务暴露方式。Ingress资源定义了HTTP/HTTPS路由规则,而Ingress Controller则是这些规则的实现
    的头像 发表于 04-09 10:09 332次阅读

    Nginx中Master与Worker进程的工作机制

    Nginx是现代互联网架构中最常用的Web服务和反向代理软件。很多运维工程师使用Nginx多年,却对其核心架构知半解,配置优化时只会机械地调整几个参数。本文从
    的头像 发表于 04-08 14:21 207次阅读

    Ingress Nginx性能调优配置方案

    Ingress Nginx 是 Kubernetes 集群中最主流的流量入口组件,承担着集群内所有 HTTP/HTTPS 流量的路由和转发。默认配置能应付开发测试环境,但到生产环境扛高并发,各种
    的头像 发表于 02-24 11:50 363次阅读

    APD腹膜透析机中需要哪些传感?(二)

    APD腹膜透析机作为肾病患者的重要治疗设备,其核心功能是实现透析液的精准灌注与引流。在这个过程中,管路压力的实时监测直接关系到治疗安全与效果。传统的压力监测方案往往存在精度有限、长期稳定性不足、体积
    的头像 发表于 10-13 12:04 541次阅读
    APD腹膜<b class='flag-5'>透析</b>机中需要哪些传感<b class='flag-5'>器</b>?(二)

    APD腹膜透析机中需要哪些传感?(

    水分。腹膜透析机中的压力测量属于非直接接触式测量。压力传感并不直接接触患者的腹腔或透析液,而是通过监测与透析液管路连通的空气柱的压力来间接反映腹腔内压力。压力传
    的头像 发表于 10-11 12:01 619次阅读
    APD腹膜<b class='flag-5'>透析</b>机中需要哪些传感<b class='flag-5'>器</b>?(<b class='flag-5'>一</b>)

    Nginx高并发优化方案

    作为名在生产环境中摸爬滚打多年的运维工程师,我见过太多因为Nginx配置不当导致的性能瓶颈。今天分享套完整的Nginx高并发优化方案,帮助你的系统从10万QPS突破到百万级别。
    的头像 发表于 08-13 15:51 1315次阅读

    Nginx和Apache的差异

    Nginx个 轻量级/高性能 的反向代理Web服务,用于 HTTP、HTTPS、SMTP、POP3 和IMAP 协议。
    的头像 发表于 07-09 09:45 836次阅读

    详解Nginx负载均衡

    Nginx作为负载均衡器,通过将请求分发到多个后端服务,以提高性能、可靠性和扩展性。支持多种负载均衡算法,如轮询、最小连接数、IP哈希等,可以根据需求选择适合的算法。
    的头像 发表于 06-25 14:51 1240次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b>详解<b class='flag-5'>Nginx</b>负载均衡

    多轴运动控制器JMC-F2-A6中手册

    电子发烧友网站提供《多轴运动控制器JMC-F2-A6中手册.pdf》资料免费下载
    发表于 06-23 15:14 2次下载

    Nginx配置终极指南

    Nginx 是开源、高性能、高可靠的 Web 和反向代理服务,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热
    的头像 发表于 06-18 15:56 1277次阅读
    <b class='flag-5'>Nginx</b>配置终极指南

    车载整机控制器 工程机械主机控制器#硕博电子#国产控制器

    控制器
    长沙硕博电子科技股份有限公司
    发布于 :2025年05月26日 09:09:02