首页 > 系统相关 >Ingress nginx自定义错误页面

Ingress nginx自定义错误页面

时间:2024-11-19 17:57:01浏览次数:1  
标签:Ingress 自定义 -- ingress nginx controller 503

 

Ingress nginx自定义错误页面的深度定制

1、错误页面状态码

网站运行过程中难免出现问题,为用户抛出一个错误页面,常见的错误页面包含403404500502503504状态码,这些常见的错误页面状态码的含义如下

  • 403 Forbidden

  • 404 Not Found

  • 500 Internal Server Eroor

  • 502 Bad Gateway

  • 503 Service Unavailable

  • 504 Gateway Timeout

2、在k8s中模拟错误页面

本文中涉及到的的k8s集群版本、Ingress nginx版本如下

# kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.4", GitCommit:"b695d79d4f967c403a96986f1750a35eb75e75f1", GitTreeState:"clean", BuildDate:"2021-11-17T15:48:33Z", GoVersion:"go1.16.10", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.4", GitCommit:"b695d79d4f967c403a96986f1750a35eb75e75f1", GitTreeState:"clean", BuildDate:"2021-11-17T15:42:41Z", GoVersion:"go1.16.10", Compiler:"gc", Platform:"linux/amd64"}
​
# POD_NAME=$(kubectl get pods -l app.kubernetes.io/name=ingress-nginx -n ingress-nginx -o jsonpath='{.items[0].metadata.name}')
​
# kubectl exec -it $POD_NAME -n ingress-nginx -- /nginx-ingress-controller --version
-------------------------------------------------------------------------------
NGINX Ingress controller
  Release:       v1.11.1
  Build:         7c44f992012555ff7f4e47c08d7c542ca9b4b1f7
  Repository:    https://github.com/kubernetes/ingress-nginx
  nginx version: nginx/1.25.5
​
-------------------------------------------------------------------------------
​

对于错误页面状态码,为了方便,这里模拟出404503两个错误状态码页面

  • 404页面

解析一个路径不存在的域名到Ingress controller所在的节点,进行访问,页面如下

image-20241119145913050

image-20241119103334119

  • 503页面

k8s中创建一个如下的Ingress资源

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingrss-nginx-503
  namespace: ratel-test1
spec:
  ingressClassName: nginx
  rules:
    - host: example.bar.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx-503
                port:
                  number: 80
​

修改nginx-503配置文件

##可用 hostPath:挂在配置文件到容器测试使用挂载到/etc/nginx/conf.d/default.conf 
server {
    listen       80;
    server_name  localhost;
​
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
​
    location / {
       return 503;  #修改为这个
    }
​
    #error_page  404              /404.html;
​

同样将对应的域名解析Ingress controller所在的节点进行访问,由于该Ingress的后端nginx做了配置,因此会返回默认的503(服务暂时不可用)

image-20241119152234168

image-20241119152455485

3、部署默认后端

Ingress nginx提供了默认的自定义后端供用户使用,yaml如下

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-errors
  namespace: ratel-test1
  labels:
    app: nginx-errors
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-errors
  template:
    metadata:
      labels:
        app: nginx-errors
      annotations:
        app: nginx-errors
    spec:
      containers:
        - name: nginx-errors
          image: nginx:1.15.2
          command:
            - sh
            - '-c'
            - >-
              echo 404 503 > /usr/share/nginx/html/index.html && exec nginx -g #这里显示了默认后端要展示的内容
              'daemon off;'
          ports:
            - name: nginxport
              containerPort: 8080
              protocol: TCP

检查创建的资源

 ~]#  kubectl get deploy,svc -n ratel-test1 
NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-404     1/1     1            1           6h3m
deployment.apps/nginx-503     1/1     1            1           5h23m
deployment.apps/nginx-error   1/1     1            1           58s
​
NAME                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
service/nginx-404     ClusterIP   10.97.88.255     <none>        80/TCP    6h3m
service/nginx-503     ClusterIP   10.102.193.125   <none>        80/TCP    5h23m
service/nginx-error   ClusterIP   10.96.161.36     <none>        80/TCP    58s

3.1 配置启动参数

修改Ingress controller控制器的启动参数,加入以下配置,通过--default-backend标志的值设置为新创建的错误后端的名称

#kubectl edit -n ingress-nginx ds ingress-nginx-controller 
containers:
        - name: controller
          image: >-
            registry.cn-hangzhou.aliyuncs.com/jiuxiang-iimages/nginx-ingress-controller:v1.11.1
          args:
            - /nginx-ingress-controller
            - '--publish-service=$(POD_NAMESPACE)/ingress-nginx-controller'
            - '--election-id=ingress-nginx-leader'
            - '--controller-class=k8s.io/ingress-nginx'
            - '--ingress-class=nginx'
            - '--configmap=$(POD_NAMESPACE)/ingress-nginx-controller'
            - '--validating-webhook=:8443'
            - '--validating-webhook-certificate=/usr/local/certificates/cert'
            - '--validating-webhook-key=/usr/local/certificates/key'
            - '--enable-metrics=false'
            - '--default-backend-service=ratel-test1/nginx-error'   # ratel-test1确保这里指定了正确的命名空间和服务

3.2 修改configmap

修改对应的configmap指定要关联到默认后端服务的服务状态码,意味着如果状态码是配置项中的值,那么返回给客户端浏览器的就是默认后端服务

# kubectl edit -n ingress-nginx cm ingress-nginx-controller
data:
  allow-snippet-annotations: 'false'
  custom-http-errors: 403,404,500,502,503,504

3.4 测试

通过终端命令访问上面404503页面的两个域名

404域名

image-20241119171243053

503域名

image-20241119171327100

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。

k8s Ingress nginx错误页面的深度定制-腾讯云开发者社区-腾讯云

标签:Ingress,自定义,--,ingress,nginx,controller,503
From: https://www.cnblogs.com/sl08/p/18555341

相关文章

  • 安装nginx
    前提:安装docker服务并配置私有库云服务器或者本地服务器开放nginx端口80拉取Nginx镜像#登陆私有库dockerlogin-uadmin-p私有库密码http://8.134.59.62:8083#查看私有库的镜像列表curl8.134.59.62:8083/v2/_catalog#拉取nginx镜像dockerpull8.134.59.62:8083/n......
  • Nginx配置
    Nginx负载均衡反向代理nginx压缩包安装1.下载网址:https://nginx.org/en/download.html2.将下载的nginx包上传到服务器(nginx-1.26.2)3.解压压缩包初始化Nginx1、进行configure进入Nginx的根目录,执行命令:./configure(1)假如进入configure时报错如出现图片错误,则需要运......
  • docker原理、常用命令,以及部署nginx、tomcat、es+kibana练习(一)
    基本结构镜像(image):docker镜像可以当作一个模板,通过这个模板可以创建多个容器。例如一个tomcat镜像=>运行=>容器(提供服务)容器(container):docker利用容器技术,可以独立运行一个或一组应用(容器间相互隔离)docker容器通过镜像来创建,即容器中的进程依赖于镜像中的文......
  • RedMine自定义--新增复制问题标题和链接按钮
    前言:Redmine本身的复制链接按钮只能复制问题的链接详情,复制出来的格式是:ip.xxxx/issues/200  这次自定义出来一个按钮,希望可以复制问题的标题和链接,这样发送问题给别人时能先知道这个问题大概是什么 一:首先找到redmine菜单栏的代码路径,在:redmine/app/views/issues的_action......
  • Jmeter进行IP欺骗,使用自定义 HTTP Header 设置 IP 地址
     1、创建ips.txt文件,在里面写入局域网中没有被使用的ip地址;添加线程组  2、在线程组里加入‘CSV数据文件设置’,填上ips.txt文件 3、在线程组里加入HTTP信息头管理器,加入请求头X-Forwarded-For,值写‘CSV数据文件设置’中的‘变量名称’ 4、在线程组里加入HTTP请求......
  • 使用 Nginx Ingress 实现金丝雀发布/灰度发布
    使用NginxIngress实现金丝雀发布/灰度发布说明:使用NginxIngress实现金丝雀发布的集群,需部署NginxIngress作为IngressController,并且对外暴露统一的流量入口。详情请参见在TKE上部署NginxIngress。使用场景使用NginxIngress实现金丝雀发布适用场景主要取决......
  • IDEA自定义注释模板
    1.修改类头的文档注释信息效果:  步骤:Editor–FileandCodeTemplates/**@Author:野马哥@Description:@DateCreatedin${YEAR}-${MONTH}-${DAY}${TIME}@ModifiedBy:*/直接在右边的文件框里编辑你说需要注释的东西,然后应用保存之后,当你创建类的时候......
  • Nacos 配置中心变更利器:自定义标签灰度
    作者:柳遵飞配置中心被广泛使用配置中心是Nacos的核心功能之一,接入配置中心,可以实现不重启线上应用的情况下动态改变程序的运行期行为,在整个软件生命周期中,可以极大降低了软件构建及部署的成本,提升效率,为业务发展提速。配置中心在各个领域都有着非常广泛的应用。上图列举了N......
  • centos7安装nginx
    1.安装EPEL仓库:sudoyuminstallepel-release2.添加yum源:sudorpm-ivhhttp://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm3.安装Nginx:sudoyuminstallnginx4.启动Nginx服务并设置开机启动: sudosystemctlstart......
  • k8s: 配置ingress的会话亲和(转载)
    Ingress会话亲和,又称会话保持,粘性会话,指同一客户端的请求在一定时间内会被ingress路由到相同的pod处理.本文控制器使用的是ingress-nginx ingress默认的负载均衡策略是轮询,验证如下使用浏览器连续访问9次ingress查看ingress日志,可看到9次请求被轮询负载到不同pod处......