NGINX Ingress Controller 设置未配置过的域名增加默认路由

news/发布时间2024/5/17 17:09:43

背景

k8s 集群对应的公网 slb ip 经常被人绑定域名,监控侧经常会收集到 502 相关状态码的异常告警,着手处理这种bad case

策略

1.  所有没有在ingress 配置过的域名要进行处理,即不是公司的、非法绑定到slb 上的域名要加上一条策略
2. NGINX Ingress Controller 设置未配置过的域名增加一条默认路由,指向一个固定的服务

方法

  • Dockerfile
#cat Dockerfile 
FROM nginx:latest #一个nginx镜像即可
ADD defalut.conf /opt/openresty/nginx/conf/vhost/  #拷贝一个nginx 自定义的配置文件进去
RUN mkdir /export/html  #创建 404 图片放置的目录
COPY 404.jpeg /export/html/  #拷贝一张随意的404 图片
EXPOSE 80
CMD ["/opt/openresty/nginx/sbin/nginx","-g","daemon off;"]
  • default.conf 配置文件
#cat defalut.conf 
server {listen       80;server_name  localhost;#charset koi8-r;#access_log  /var/log/nginx/host.access.log  main;location / {root   /user/share/nginx/html;  #目录不用创建,且该目录也不用存在index  index.html index.htm;error_page  404              /404.jpeg; #定义404 的方法proxy_set_header HOST   $host;proxy_set_header X-Real-IP      $remote_addr;proxy_set_header X-Forwarded-FOR $proxy_add_x_forwarded_for;}location = /404.jpeg { #处理404 的方法root  /export/html;}# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}
}
  • 打镜像
  • 准备yaml 配置文件
# cat default-dp.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: default-backendnamespace: default-backend
spec:replicas: 1selector:matchLabels:app: default-backendtemplate:metadata:labels:app: default-backendspec:containers:- name: default-backendimage: registry-vpc.cn-xxx.aliyuncs.com/xxx/nginx:default-server-v002ports:- containerPort: 80# cat default-svc.yaml 
apiVersion: v1
kind: Service
metadata:name: default-backendnamespace: default-backend
spec:selector:app: default-backendports:- protocol: TCPport: 80targetPort: 80# cat default-ingress.yaml  (nginx.ingress.kubernetes.io/default-backend注解,并结合*通配符来匹配所有未配置的域名)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: example-ingressnamespace: default-backendannotations:nginx.ingress.kubernetes.io/default-backend: default-backend
spec:rules:- http:paths:- backend:service:name: default-backendport:number: 80path: /pathType: Prefix
  • 生成配置文件
# kubectl apply  -f default-dp.yaml 
# kubectl apply  -f default-svc.yaml 
# kubectl apply  -f default-ingress.yaml
  • 查看 ingress (* nginx.ingress.kubernetes.io/default-backend注解,并结合*通配符来匹配所有未配置的域名 )
# kubectl  get ingress -n default-backend 
NAME              CLASS   HOSTS   ADDRESS       PORTS   AGE
example-ingress   nginx   *       172.16.4.41   80      3h37m
  • 本地访问测试
# 随意一个域名绑定到k8s 对外的slb 地址上,显示 404 的图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/50108110.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

centos7 安装 Mysql 5.7.28,详细完整教程

https://cloud.tencent.com/developer/article/18863391. 下载 MySQL yum包wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm 复制2.安装MySQL源rpm -Uvh mysql57-community-release-el7-10.noarch.rpm 复制3.安装MySQL服务端,需要等待一些时间yum ins…

golang+kafka

目录1. 安装JDK、Zookeeper、Scala、kafka2. 启动kafka3. 创建topics4. 查看topics5. 打开一个producer6. 打开一个consumer7. 测试发送和接收消息Windows下安装Kafka 1. 安装JDK、Zookeeper、Scala、kafka 安装Kafka之前,需要安装JDK、Zookeeper、Scala。Kafka依赖Zookeeper,…

Python-数字取证秘籍(三)

Python 数字取证秘籍(三)原文:zh.annas-archive.org/md5/941c711b36df2129e5f7d215d3712f03 译者:飞龙 协议:CC BY-NC-SA 4.0第六章:阅读电子邮件和获取名称的配方 本章涵盖了以下配方:解析 EML 文件查看 MSG 文件订购外卖盒子里有什么?解析 PST 和 OST 邮箱介绍 一旦计…

一个.NET内置依赖注入的小型强化版

前言 .NET生态中有许多依赖注入容器。在大多数情况下,微软提供的内置容器在易用性和性能方面都非常优秀。外加ASP.NET Core默认使用内置容器,使用很方便。 但是笔者在使用中一直有一个头疼的问题:服务工厂无法提供请求的服务类型相关的信息。这在一般情况下并没有影响,但是…

宝塔面板mysql无法启动问题如何解决

宝塔面板无法启动的问题和解决 如果你的宝塔里面的mysql无法启动了,请先看是不是以下的配置问题 1.是不是你的3306端口被占用了导致mysql无法启动 2.是不是磁盘空间不足导致的无法启动 如果都不是这些问题再继续向下看 常见问题: 1、Mysql安装好后或迁移文件后无法启动 2、My…

小程序上显示富文本

功能:富文本内容格式化、拿到富文本里的所有图片点击放大图片util.tsexport function formatRichText(html: any) { // 富文本内容格式化let arrText = html;//正则匹配不含style="" 或 style= 的img标签var regex1 = new RegExp("(i?)(\<img)(?!(.*?sty…