k8s使用nginx相关操作

文章目录

      • nginx location语法
  • 一. 有资源的静态页面
      • 1.1 制作docker镜像
          • 1.1.1 index.html
          • 1.1.2 创建`nginx`配置文件`default.conf`
          • 1.1.3 创建`Dockerfile`文件
          • 1.1.4 `build`和`push`镜像到阿里云
      • 1.2 编写资源文件 quanxiwu-nginx.yaml
      • 1.3 测试
  • 二. `ingress-nginx`配置路径转发

nginx location语法

基本语法:location [=||*|^~] /uri/ { … }

=:严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。
~:为区分大小写匹配(可用正则表达式)
!~:为区分大小写不匹配
~*:为不区分大小写匹配(可用正则表达式)
!~*:为不区分大小写不匹配
^~:如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。

示例

location = / {
 # 只匹配 / 查询。
}
location / {
 # 匹配任何查询,因为所有请求都以 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。
}
location ^~ /images/ {
 # 匹配任何以 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
}
location ~*.(gif|jpg|jpeg)$ {
 # 匹配任何以 gif、jpg 或 jpeg 结尾的请求。
}
location ~*.(gif|jpg|swf)$ {
  valid_referers none blocked start.igrow.cn sta.igrow.cn;
  if ($invalid_referer) {
    #防盗链
    rewrite ^/ http://$host/logo.png;
  }
}

一. 有资源的静态页面

1.1 制作docker镜像

k8s使用nginx相关操作_第1张图片

1.1.1 index.html


 
  
  
  
  
  
  全系屋
  
 
 
 
 
 

body里面是一张图片,地址是images/index.jpg

1.1.2 创建nginx配置文件default.conf

第一种:实用型

server {
    listen 80;
    server_name localhost;
    
    location ^~ /images{
        root /home/;  #图片路径,正常的路径是 /home/file/images,但是这里面可以配置 /home/,/home/file/,/home/file/images/三个,前面两个会自动正则匹配,后面那个是真是路径,就不正则匹配了。
    }
    
    location / {
        root /home/file;
        index index.html;
        }
}

说明:

  • location ^~ /images:这里面的图片地址如果地址不完全(实际地址为/home/file/images,可以设置为/home/),会自动正则匹配

第二种:简单易懂

server {
    listen       80;
    server_name  localhost;
    location / {
        root /home/file/;  #执行HTML和image的父级路径
        index index.html;
    }	
}

说明:
/home/file/:是根目录,把所有的静态资源文件放这里就行

1.1.3 创建Dockerfile文件
FROM registry.cn-shanghai.aliyuncs.com/wanfei/nginx:1.18.0
RUN rm -rf /etc/nginx/conf.d/default.conf && \
mkdir -p /home/file/
ADD default.conf /etc/nginx/conf.d/
ADD quanxiwu /home/file/
EXPOSE 80

说明:

  • RUN rm -rf /etc/nginx/conf.d/default.conf && mkdir -p /home/file/:删除nginx的默认配置文件default.conf,创建目录/home/file/用于存放静态资源文件
  • ADD default.conf /etc/nginx/conf.d/:将自己修改的nginx配置替换默认配置
  • ADD quanxiwu /home/file/:将quanxiwu文件夹里面的html文件和images文件夹复制到/home/file/下面,不包含quanxiwu
1.1.4 buildpush镜像到阿里云

启动Docker Toolbox
k8s使用nginx相关操作_第2张图片
在此界面鼠标右键Git Bash Here

16872@DESKTOP-TEOEPLI MINGW64 /d/test
$ ls
default.conf  Dockerfile  quanxiwu/

16872@DESKTOP-TEOEPLI MINGW64 /d/test
$ docker login [email protected] -p www19930327 registry.cn-shanghai.aliyuncs.com

16872@DESKTOP-TEOEPLI MINGW64 /d/test
$ docker build -t registry.cn-shanghai.aliyuncs.com/wanfei/quanxiwu:v1 .

16872@DESKTOP-TEOEPLI MINGW64 /d/test
$ docker push registry.cn-shanghai.aliyuncs.com/wanfei/quanxiwu:v1

1.2 编写资源文件 quanxiwu-nginx.yaml

[root@master k8s-yaml]# cat quanxiwu-nginx.yaml 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: quanxiwu-nginx
spec:
  template:
    metadata:
      labels:
        app: quanxiwu-nginx
    spec:
      containers:
      - name: quanxiwu-nginx
        image: registry.cn-shanghai.aliyuncs.com/wanfei/quanxiwu:v1
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: quanxiwu-nginx
  labels:
    app: quanxiwu-nginx
spec:
  ports:
  - port: 80
    protocol: TCP
    name: http
  selector:
    app: quanxiwu-nginx
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: quanxiwu-nginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
    kubernetes.io/tls-acme: "true"
spec:
  tls:
  - hosts:
    - quanxiwu.wanfei.wang
    secretName: quanxiwu-tls
  rules:
  - host: quanxiwu.wanfei.wang
    http:
      paths:
      - path: '/'
        backend:
          serviceName: quanxiwu-nginx
          servicePort: 80

运行

[root@master k8s-yaml]# kubectl apply -f quanxiwu-nginx.yaml

1.3 测试

请求 https://quanxiwu.wanfei.wang

k8s使用nginx相关操作_第3张图片

二. ingress-nginx配置路径转发

参考

  • https://blog.51cto.com/14154700/2452707
  • https://blog.csdn.net/nickDaDa/article/details/103347829?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

现在是请求 https://quanxiwu.wanfei.wang访问,如果想在后面加/s1才能访问

修改Ingress

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: quanxiwu-nginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - quanxiwu.wanfei.wang
    secretName: quanxiwu-tls
  rules:
  - host: quanxiwu.wanfei.wang
    http:
      paths:
      - path: '/s1'
        backend:
          serviceName: quanxiwu-nginx
          servicePort: 80

nginx.ingress.kubernetes.io/rewrite-target: /:必须要加这个,否则失败

你可能感兴趣的:(K8S,nginx)