一、概述

Ingress-nginx:它是由Kubernetes社区基于Nginx Web服务器开发的,并补充了一组用于实现额外功能的Lua插件,作为“官方”默认控制器支持当然最优。

Github:https://github.com/kubernetes/ingress-nginx

说明文档:https://kubernetes.github.io/ingress-nginx/deploy/

Nginx-ingress:这是Nginx官方社区开发产品,Nginx ingress具有很高的稳定性,持续的向后兼容性,没有任何第三方模块,并且由于消除了Lua代码而保证了较高的速度。

Github:https://github.com/nginxinc/kubernetes-ingress

说明文档:https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/

差异对比:

更多详情:https://github.com/nginxinc/kubernetes-ingress/blob/master/docs/nginx-ingress-controllers.md


二、自定义配置

Ingress-nginx:

apiVersion: v1
kind: ConfigMap
metadata:
labels:
helm.sh/chart: ingress-nginx-2.13.0
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/version: 0.35.0
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: controller
name: ingress-nginx-controller
namespace: ingress-nginx
data:
proxy-connect-timeout: 5
proxy-read-timeout: 60
client-body-buffer-size: "8k"
worker-processes: ""
max-worker-connections: 16384

更多公共配置参考:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/

特定Ingress配置:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/

Nginx-ingress:

apiVersion: v1
metadata:
name: nginx-config
namespace: nginx-ingress
data:
proxy-connect-timeout: "60s"
proxy-read-timeout: "60s"
client-max-body-size: "80m"
worker-processes: ""
worker-connections: ""
external-status-address: "10.88.88.108"

常用配置说明:

  proxy-connect-timeout: 定义与代理服务器建立连接的超时,默认60s。请注意,此超时通常不能超过75秒。
proxy-read-timeout: 定义用于从代理服务器读取响应的超时,默认60s。超时仅在两次连续的读取操作之间设置,而不用于传输整个响应。
               如果代理服务器在此时间内未传输任何内容,则连接将关闭。
client-max-body-size: 设置客户端请求正文的最大允许大小,默认1m,在“ Content-Length”请求标头字段中指定。
                如果请求中的大小超过配置的值,则会向客户端返回413(请求实体太大)错误。
                  请注意,浏览器无法正确显示此错误。设置size为0将禁用客户端请求主体大小的检查。
worker-processes: 定义工作进程数。最佳值取决于许多因素,包括(但不限于)CPU内核数,存储数据的硬盘驱动器数以及加载模式。
             如有疑问,将其设置为可用的CPU内核数将是一个不错的开始(默认值“auto”将尝试自动检测)。
  worker-connections: 设置工作进程可以打开的最大同时连接数,默认1024。
               应当记住,该数目包括所有连接(例如,与代理服务器的连接等),而不仅包括与客户端的连接。
                另一个需要考虑的因素是,并发连接的实际数量不能超过打开文件最大数量的当前限制,可以通过worker_rlimit_nofile进行更改 。
  external-status-address: 设置要在Ingress资源状态下负载的地址,需要-report-status命令行参数,并且将覆盖-external-service参数。

更多公共配置参考:https://docs.nginx.com/nginx-ingress-controller/configuration/global-configuration/configmap-resource/

特定Ingress配置:https://docs.nginx.com/nginx-ingress-controller/configuration/ingress-resources/advanced-configuration-with-annotations/


三、资源定义

1) 同一域名,不同URL被转发不同服务

Ingress-nginx:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ymtapi
namespace: ymt
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: k8s.ymtapi.org
http:
paths:
- path: /wxapi
backend:
serviceName: apprestserver
servicePort: 8114
- path: /api
backend:
serviceName: appsocialmanservice
servicePort: 8113

Nginx-ingress:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ymtapi
namespace: ymt
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: k8s.ymtapi.org
http:
paths:
- path: /wxapi
backend:
serviceName: apprestserver
servicePort: 8114
- path: /api
backend:
serviceName: appsocialmanservice
servicePort: 8113

2) 不同域名被转发不同服务

Ingress-nginx:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: prometheus
namespace: monitoring
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: k8s.grafana.com
http:
paths:
- path: /
backend:
serviceName: grafana
servicePort: 3000 - host: k8s.prometheus.com
http:
paths:
- path: /
backend:
serviceName: prometheus-k8s
servicePort: 9090 - host: k8s.alertmanager.com
http:
paths:
- path: /
backend:
serviceName: alertmanager-main
servicePort: 9093

Nginx-ingress:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: prometheus
namespace: monitoring
spec:
rules:
- host: k8s.grafana.com
http:
paths:
- path: /
backend:
serviceName: grafana
servicePort: 3000 - host: k8s.prometheus.com
http:
paths:
- path: /
backend:
serviceName: prometheus-k8s
servicePort: 9090 - host: k8s.alertmanager.com
http:
paths:
- path: /
backend:
serviceName: alertmanager-main
servicePort: 9093

3)不使用域名的转发

Ingress-nginx:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ymtapi
namespace: ymt
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- http:
paths:
- path: /WxTransWeb
backend:
serviceName: wxtransweb
servicePort: 8080

Nginx-ingress:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ymtapi
namespace: ymt
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.org/server-snippets: "server_name ~^.*$;"
spec:
rules:
- host: k8s.ymtapi.org
http:
paths:
- path: /WxTransWeb
backend:
serviceName: wxtransweb
servicePort: 8080

注意:Nginx-ingress要求host必须存在,也就是必须使用域名,如果想直接使用IP访问,则只能通过设置"server_name ~^.*$;"实现,即同时支持域名和IP访问,但是仅能设置一个Ingress。

Github issue:https://github.com/nginxinc/kubernetes-ingress/issues/209#issuecomment-581691384

4)基于TLS的安全设置

Ingress-nginx:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: dashboard
namespace: kubernetes-dashboard
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
tls:
- hosts:
- k8s.dashboard.com
secretName: tls-secret
rules:
- host: k8s.dashboard.com
http:
paths:
- path: /
backend:
serviceName: kubernetes-dashboard
servicePort: 443

Nginx-ingress:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dashboard
namespace: kubernetes-dashboard
annotations:
nginx.org/redirect-to-https: "true"
ingress.kubernetes.io/ssl-redirect: "true"
nginx.org/ssl-services: "kubernetes-dashboard"
spec:
tls:
- hosts:
- k8s.dashboard.com
secretName: tls-secret
rules:
- host: k8s.dashboard.com
http:
paths:
- path: /
backend:
serviceName: kubernetes-dashboard
servicePort: 443

作者:Leozhanggg

出处:https://www.cnblogs.com/leozhanggg/p/13603215.html

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Ingress-nginx 与 Nginx-ingress的更多相关文章

  1. 使用 NGINX 和 NGINX Plus 的 Ingress Controller 进行 Kubernetes 的负载均衡

    运行和管理跨机器集群的大规模的容器微服务应用是一个极具挑战的任务.Kubernetes 提供了一个强大的容器编排解决方案,从而帮助我们迎接这个挑战.它包含了一些重要特性,比如容错,自动伸缩,滚动升级, ...

  2. Nginx配置文件nginx.conf中文详解(转)

    ######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_ ...

  3. 苹果下如果安装nginx,给nginx安装markdown第三方插件

    用brew install nginx 这样安装的是最新版的nginx, 但是在有些情况下,安装第三方插件需要特定的版本,更高一级的版本可能装不上. 它的原理是下载安装包进行自动安装,建立软链,这样就 ...

  4. Nginx research, nginx module development

    catalog . 初探nginx架构 . handler模块 . Nginx编译.安装.配置 . Hello World模块开发 1. 初探nginx架构 nginx在启动后,在unix系统中会以d ...

  5. 通过Nginx和Nginx Plus阻止DDoS攻击

    分布式拒绝服务攻击(DDoS)指的是通过多台机器向一个服务或者网站发送大量看似合法的数据包使其网络阻塞.资源耗尽从而不能为正常用户提供正常服务的攻击手段.随着互联网带宽的增加和相关工具的不断发布,这种 ...

  6. 解决Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid

    重新启动服务器,访问web服务发现无法浏览啦!登陆服务器之后进到nginx使用./nginx -s reload重新读取配置文件,发现报nginx: [error] open() "/usr ...

  7. nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"

    iwangzheng.com tty:[0] jobs:[0] cwd:[/opt/nginx/conf] 12:45 [root@a02.cmsapi]$ /usr/local/nginx/sbin ...

  8. Nginx 报错: nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory) 的解决方法

    今天测试域名访问不了,登陆 Linux(Ubuntu)重启Nginx: nginx -s reload 结果报错: nginx: [error] open() : No such file or di ...

  9. 解决nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed错误

    重新启动服务器,访问web服务发现无法浏览,登陆服务器之 后进到nginx使用./nginx -s reload重新读取配置文件,发现报nginx: [error] open() "/usr ...

  10. Nginx配置文件nginx.conf详细说明

    Nginx配置文件nginx.conf详细说明 #worker_processes 8; #worker_cpu_affinity 00000001 00000010 00000100 0000100 ...

随机推荐

  1. setOff与scrollTop区别

    1.offsetTop     : 当前对象到其上级层顶部的距离. 不能对其进行赋值.设置对象到页面顶部的距离请用style.top属性. 2.offsetLeft    : 当前对象到其上级层左边的 ...

  2. ABAP 动态备份自建表数据到新表(自建表有数据的情况下要改字段长度或者其他)

    当abaper开发好一个程序给用户使用一段时间后,发现某个字段的长度需要修改,但数据库表中已经存在很多数据,冒然直接改表字段可能会导致数据丢失,这种问题的后果可能非常严重. 所以我想到先复制出一个新表 ...

  3. Go语言系列(三)之数组和切片

    <Go语言系列文章> Go语言系列(一)之Go的安装和使用 Go语言系列(二)之基础语法总结 1. 数组 数组用于存储若干个相同类型的变量的集合.数组中每个变量称为数组的元素,每个元素都有 ...

  4. Eclipse Java EE IDE for Web Developers 4.5.1 安装hibername tools 插件

    方式一:在线安装(太慢) 方式二:离线安装,下载hibernate tools 插件到本地,然后在eclipse菜单栏点击 help: ①添加插件,选择下载后的插件,内容框中可选择hibernate ...

  5. 013_go语言中的函数多返回值

    代码演示 package main import "fmt" func vals() (int, int) { return 3, 7 } func main() { a, b : ...

  6. 眼见为实 — CSS的overflow属性

    1. overflow属性 CSS的overflow属性指定当内容溢出一个元素的框,会发生什么.举个栗子: <!DOCTYPE html> <html> <head> ...

  7. 在 .NetCore 项目中使用 SkyWalkingAPM 踩坑排坑日记

    SkyWalking 概述 SkyWalking 是观察性分析平台和应用性能管理系统.提供分布式追踪.服务网格遥测分析.度量聚合和可视化一体化解决方案.支持Java, .Net Core, PHP, ...

  8. C#LeetCode刷题之#559-N叉树的最大深度​​​​​​​(Maximum Depth of N-ary Tree)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4088 访问. 给定一个 N 叉树,找到其最大深度. 最大深度是指 ...

  9. externaltrafficpolicy的有关问题说明

    环境描述 生产环境通过gitlab-running实现自动化发布业务,现需要收集客户端的真实ip,需要将externaltrafficpolicy改为lacal模式(原来是cluster模式),前天开 ...

  10. Windows10 + Ubuntu 20.04 LTS 双系统安装 (UEFI + GPT)(图文,多图预警)

    版权声明:本文为CSDN博主「ZChen1996」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/ZChen1 ...