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

    文章

    896

    浏览量

    34606
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66746
  • nginx
    +关注

    关注

    0

    文章

    135

    浏览量

    11985

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

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

收藏 人收藏

    评论

    相关推荐

    腾讯云和华为云的ingress路径匹配规则把我绕晕了

    本文主要调研了Tke的两类ingress,分别是应用型CLB和Nginx ingress Controller,这两类ingress在页面创建时均不支持选择路径匹配规则,而二者关于路径
    的头像 发表于 01-08 15:59 314次阅读
    腾讯云和华为云的<b class='flag-5'>ingress</b>路径匹配规则把我绕晕了

    洗墙灯与控制器接线方式,使其实现全RGBW颜色控制#智能照明

    控制器rgbw
    零奔洋光电-专业灯带
    发布于 :2023年11月28日 08:43:03

    Nginx 如何实现高性能低消耗

    Nginx具有丰富的模块库、灵活的配置、较低资源消耗等优点。下面,我们一起深入看一下Nginx的工作机制 1. Nginx 如何实现高性能低消耗的呢? 我们从以下几个方面说明以下:
    的头像 发表于 11-11 11:31 343次阅读
    <b class='flag-5'>Nginx</b> 如何<b class='flag-5'>实现</b>高性能低消耗

    Nginx目录结构有哪些

    什么是NginxNginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx
    的头像 发表于 11-11 11:27 379次阅读
    <b class='flag-5'>Nginx</b>目录结构有哪些

    ZMC运动控制器多任务编程

    子程序任务或标记任务旦开启,便与主程序无关,任务运行停止后可重复触发任务执行。 控制器多任务的优势:1、程序模块化:用户可以将程序编写成多个较小的、特定的程序,来实现客户设备指定的功能。2、并发
    发表于 11-07 09:52

    在AT32微控制器实现QR Decode应用程序的般方法

    QR Decode to VirtualComPort提供在AT32微控制器实现QR Decode应用程序的般方法。
    发表于 10-19 07:03

    Nginx常用配置与命令

    对于前端来说 Node.js 并不陌生, Nginx 和 Node.js 的很多理念类似, HTTP 服务器、事件驱动、异步非阻塞等,且 Nginx 的大部分功能使用 Node.js 也可以实现,但
    发表于 10-18 10:04 159次阅读
    <b class='flag-5'>Nginx</b>常用配置与命令

    不用Nginx,只用Tomcat的Http请求流程

    只用Tomcat,不用Nginx搭建Web服务,行不行?我曾经提出的愚蠢问题,今天详细给自己解释下,为什么必须用Nginx
    的头像 发表于 10-17 10:54 371次阅读

    #控制器 #阀门# 无线传输# 脉冲阀门控制器灌溉控制器

    控制器无线传输
    pgz1234
    发布于 :2023年10月10日 11:03:13

    Nginx的特点和作用 Nginx常用命令和核心配置

    Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行
    的头像 发表于 09-01 09:53 359次阅读
    <b class='flag-5'>Nginx</b>的特点和作用 <b class='flag-5'>Nginx</b>常用命令和核心配置

    【昉·星光 2 高性能RISC-V单板计算机体验】使用nginx、ffmpeg和VLC搭建简单视频直播系统

    本文将介绍——如何在VisonFive2开发板上使用nginx和http-flv模块实现视频流转发、如何使用ffmpeg推流,以及如何在PC上使用VLC播放查看视频流的画面。本文首先介绍如何通过
    发表于 08-27 19:06

    k8s生态链包含哪些技术

    Controller 实现。 而 APISIX Ingress 则是另一种 Ingress Controller 的实现。跟 Kubernetes
    的头像 发表于 08-07 10:56 665次阅读
    k8s生态链包含哪些技术

    搭建Keepalived+Lvs+Nginx高可用集群负载均衡

    Server)实现高可用负载均衡 附:LVS的负载均衡算法 八、搭建Keepalived+Lvs+Nginx高可用集群负载均衡 一、Nginx安装 1、去官网http://nginx
    的头像 发表于 06-25 15:39 1804次阅读
    搭建Keepalived+Lvs+<b class='flag-5'>Nginx</b>高可用集群负载均衡

    MCU控制器是什么?MCU控制器有哪些作用?

    可以使用C语言、汇编语言等编程语言来开发控制程序,实现各种自动化控制和数据处理功能。   MCU控制器的作用   MCU控制器
    发表于 05-05 14:59

    Nginx常用的配置和基本功能讲解

    Nginx 已经广泛应用于 J-one 和 Jdos 的环境部署上,本文对 Nginx 的常用的配置和基本功能进行讲解,适合 Nginx 入门学习。
    的头像 发表于 05-04 10:25 414次阅读