kubernetes Server-Ingress-Nginx使用方法,Auth、URL重定向、等基础域名负载使用方法

kubernetes Server-Ingress-Nginx


Ingress 七层代理,必须绑定域名,用Nginx服务做的反向代理

Ingress-Nginx 官网地址https://kubernetes.github.io/ingress-nginx/deploy/

<所有 Ingress-Nginx 的学习资料都在官网网站里面了>

Ingress-Nginx 架构:

在这里插入图片描述

  1. 客户端访问域名,到达 K8s集群内部 - Nginx 反向代理,选择到后端的 Service - Pod 容器
  2. Nginx - NodePort Service 部署方案 ,暴露给外部用户
  3. 后端服务 创建 Service1,Service2 。Nginx 通过 Service1,Service2 来进行负载均衡

Ingress-Nginx 工作流程:

在这里插入图片描述

  1. 通过 APIServer 与 Store 协程进入监听状态。

  2. 如果发生数据写入,会写入到 updateChannel 循环消息队列当中。

  3. 通过 NginxController 主进程 监听 updateChannel 中写入的事件,发生一个循环后会更新一个事件。

  4. 将事件追加同步到 SyncQueue 消息队列,等待被 协程更改配置文件。协程会定期从队列中拉取要执行的任务。

  5. 如果有一些必要直接需要修改、更新的任务会直接发送到 SyncQueue,由Store 直接沟通 SyncQueue。

  6. 收取到所有要更新的数据,协程会判断是否需要重载写入数据。

    1. 如果需要写入会写入到 Nginx 配置文件,并进行重载 Nginx服务。

    2. 如果不需要,会构造 Post 数据(不需要重载的数据)以 Lua Server 模块直接运行。


一、安装 Ingress

创建目录

mkdir -p /kubernetes/plugin/ingress

从官网下载最新版本的 Ningx-Ingress文件

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud/deploy.yaml

查看这个文件中所需要的镜像,并将其下载到本地,做成镜像包

cat deploy.yaml | grep image

docker pull  quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.33.0

docker save -o ingress.contr.tar  quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.33.0

tar -zxvf ingress.contr.tar.gz  ingress.contr.tar

将做好的 tar包传到所有 node 节点上,然后解压成镜像

tar -zxvf ingress.contr.tar.gz

docker load -i ingress.contr.tar

执行 Ingress-Nginx 剧本,并查看其运行状态

kubectl apply -f deploy.yaml

kubectl get pod -n ingress-nginx -n 指定namespace名称空间,Ingress-Nginx所有的信息都在这个名称空间内查看


下载官网给出的 NodePort - Service 的文件

在这里插入图片描述

**有时候会出现重名:**mv deploy.yaml.1 nodeport.yaml

kubectl apply -f nodeport.yaml

kubectl get svc -n ingress-nginx 带上特有的名称空间来查看其 SVC 暴露 IP 和端口
在这里插入图片描述
到此 Ingress - Nginx 7层反向代理已经做完了,可以看到外暴露80/443的映射端口。


二、创建后端 Service - Deployment - Pod

运行一个 deployment 控制的2副本 Nginx 服务,并设置一个普通的Service

apiVersion: apps/v1
kind: Deployment
metadata: 
  name: nginx-dm
spec: 
  replicas: 2 
  selector: 
  	matchLabels:
  	   app: nginx
  template: 
    metadata: 
      labels:  
         app: nginx
    spec: 
      containers: 
        - name: nginx
          image: nginx:1.9.0
          imagePullPolicy: IfNotPresent
          ports: 
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata: 
  name: nginx-svc
spec: 
  ports: 
    - port: 80
      targetPort: 80
      protocol: TCP
  selector: 
    app: nginx

kubectl describe svc nginx-svc
在这里插入图片描述
kubectl get pod -o wide

在这里插入图片描述可以访问ClusterIP,做到Pod内部的负载均衡


三、通过 Ingress 7 层代理,将内部的 Service - Deployment - Pod 暴露外网,根据域名访问

创建一个 Ingress - Service,与 nginx -svc 对应,也可以理解成在 Nginx - svc 4层 上嵌套了一个 Ingress 7 层代理,代理规则用的是域名。

在这里插入图片描述

apiVersion: extensions/v1beta1
kind: Ingress
metadata: 
  name: nginx-test
spec:
  rules:	#Ingress 的规则
    - host: www.shmguigu.com  	#主机域名
      http: 			#页面信息
        paths: 			#访问路径
          - path: /		#访问域名根路径
            backend: 	
              serviceName: nginx-svc	#连接 nginx-svc Service
              servicePort: 80			#映射 nginx-svc 80

ingress- test 写入到了 Ingress-Nginx 的配置文件当中,通过 Ingress-Nginx进行后端负载

查看方法如下:

kubectl exec ingress-nginx-controller-75f84dfcd7-2w855 -n ingress-nginx -it -- /bin/bash

vi nginx.conf


修改本机的 Hosts
192.168.168.11 www.shmguigu.com
在这里插入图片描述

通过 Ingress 域名规则验证访问

在这里插入图片描述


四、Ingress 代理两个web集群服务,提供两个域名反代

在这里插入图片描述
先不要急着创建 ingress,跟之前写法有些不同,先将内网的两个 Pod 集群做好

Service - Deployment - Pod - Nginx

apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deploy
spec:
 replicas: 2
 selector:
   matchLabels:
      app: nginx-deploy
 template:
   metadata:
     labels:
        app: nginx-deploy
   spec:
     containers:
       - name: nginx
         image: nginx:1.9.0
         imagePullPolicy: IfNotPresent
         ports:
            - name: http
              containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
 name: nginx-svc
 namespace: default
spec:
 type: ClusterIP
 selector:
   app: nginx-deploy
 ports:
   - port: 80
     targetPort: 80
     protocol: TCP

kubectl apply -f nginx.yaml --record

Service - Deployment - Pod - Apache

apiVersion: apps/v1
kind: Deployment
metadata:
 name: apache-deploy
spec:
 replicas: 2
 selector:
   matchLabels:
      app: apache-deploy
 template:
   metadata:
     labels:
        app: apache-deploy
   spec:
     containers:
       - name: apache
         image: httpd:latest
         imagePullPolicy: IfNotPresent
         ports:
            - name: http
              containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
 name: apache-svc
 namespace: default
spec:
 type: ClusterIP
 selector:
   app: apache-deploy
 ports:
   - port: 80
     targetPort: 80
     protocol: TCP

两个 Pod 集群,和两个不同的 SVC已经建立好了
在这里插入图片描述

Ingrss 7层域名代理规则

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress1
spec:
  rules:
   - host: www.nginx.con
     http:
       paths:
        - path: /
          backend:
            serviceName: nginx-svc
            servicePort: 80
---

apiVersion: extensions/v1beta1
kind: Ingress
metadata: 
  name: ingress2
spec: 
  rules: 
   - host: www.apache.con	#注意我这里是 .con
     http: 
       paths: 
        - path: /
          backend: 
            serviceName: apache-svc
            servicePort: 80

查看 Ingress 7 层代理的负载规则,进入 Ingress-Nginx 的 nginx.conf 查看

kubectl exec ingress-nginx-controller-75f84dfcd7-2w855 -n ingress-nginx -it – /bin/bash

修改主机 hosts文件
在这里插入图片描述

验证访问,效果图不放了,轮询页面

www.nginx.com:32144

www.apache.con:32144


五、Ingress HTTPS 代理

用 Ingress - Nginx 的443 映射端口来进行访问。后端的 Pod 集群服务可以是 80 ,只在 Ingress - Nginx 上创建证书即可。

创建证书,以及 cert 存储方式

[root@k8s-master https]# openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"

[root@k8s-master https]# ls
tls.crt  tls.key

kubectl create secret tls tls-secret --key tls.key --cert tls.crt  
#secret存储后面有博客会讲,直到步骤操作即可

deployment - Service - Ingress Yaml 文件,创建一个新的 Pod - Nginx集群

apiVersion: apps/v1
kind: Deployment
metadata:
 name: ng-deploy
spec:
 replicas: 2
 selector:
   matchLabels:
      app: ng-deploy
 template:
   metadata:
     labels:
        app: ng-deploy
   spec:
     containers:
       - name: test-nginx
         image: nginx:1.9.0
         imagePullPolicy: IfNotPresent
         ports:
            - name: http
              containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
 name: ng-svc
 namespace: default
spec:
 type: ClusterIP
 selector:
   app: ng-deploy
 ports:
   - port: 80
     targetPort: 80
     protocol: TCP

确认是否创建成功
在这里插入图片描述

创建 Ingrss - Nginx - HTTPS 的文件

apiVersion: extensions/v1beta1
kind: Ingress
metadata: 
 name: ng-test
spec:
  tls:
   - hosts:
      - www.ngshm.com   #主机名
     secretName: tls-secret   #secret保存证书的方案名称
  rules:
   - host: www.ngshm.com
     http:
       paths:
         - path: /
           backend:
             serviceName: ng-svc
             servicePort: 80

kubectl get svc -n ingress-nginx

在这里插入图片描述

修改本地hosts文件

访问:https://www.ngshm.com:31656


六、Nginx 进行 BasicAuth 认证

借用 http 的 htpasswd 模块

yum -y install httpd
mkdir basic-auth ;  cd basic-auth/

htpasswd -c auth foo	#foo是认证的用户
New password: 123.com	#123.com 是 foo认证的密码
Re-type new password:123.com 

kubectl create secret generic basic-auth --from-file=auth

创建一个 Ingess - BasicAuth

apiVersion: extensions/v1beta1
kind: Ingress
metadata: 
  name: ingress-with-auth
  annotations: 
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - foo'
spec:
 rules:
   - host: auth.ngshm.com
     http:
      paths:
        - path: /
          backend: 
            serviceName: ng-svc
            servicePort: 80

修改主机 hosts文件

192.168.168.11 auth.ngshm.com

访问:http://auth.ngshm.com:32144 输入用户名 foo ,密码 123.com


七、Ingress - Nginx -URL地址重写

名称描述
nginx.ingress.kubernetes.io/rewrite-target必须重定向流量的目标URLvalue
nginx.ingress.kubernetes.io/ssl-redirect指示位置部分是否仅可访问SSL(当ingress包含证书时,默认为True)布尔
nginx.ingress.kubernetes.io/force-redirect即使Ingress未启用TLS,也强制重定向到HTTPS布尔
nginx.ingress.kubernetes.io/app-root定义Controller必须重定向的应用程序根,如果它在"/"上下文中value
nginx.ingress.kubernetes.io/use-regex指示 Ingress 上定义的路径是否使用正则表达式布尔
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-rewrite
  annotations: 
    nginx.ingress.kubernetes.io/rewrite-target: https://www.ngshm.com:31656
spec:
 rules:
   - host: re.ngshm.com
     http:
      paths: 
        - path: / 
          backend: 
            serviceName: ng-svc	#不链接都行,因为是URL地址跳转
            servicePort: 80

修改本地hosts文件

192.168.168.11 re.ngshm.com

访问验证:

http://re.ngshm.com:32144

<think>嗯,用户想了解Excel中的VLOOKUP函数的用法和参数含义。首先,我需要回忆一下VLOOKUP的基本结构。VLOOKUP是垂直查找函数,用于在表格的首列查找指定的值,然后返回该行中指定列的数据。它的四个参数分别是查找值、表格范围、列索引号和匹配模式。 接下来,我得确认每个参数的具体作用。第一个参数是lookup_value,也就是用户要查找的值,比如产品ID或者姓名。第二个参数是table_array,即查找的范围,这里要注意的是,查找值必须位于这个范围的第一列,否则函数无法正确工作。第三个参数是col_index_num,也就是用户想要返回的数据在表格范围中的第几列,这个列数是从表格范围的第一列开始算起的,不是整个工作表的列。第四个参数是range_lookup,决定是精确匹配还是近似匹配,通常用FALSE或0来指定精确匹配,避免错误。 然后,用户可能需要一个具体的例子来理解如何使用。比如,假设有一个产品价格表,用户想根据产品ID查找对应的价格。这时候,VLOOKUP就可以在ID列查找,然后返回价格列的数据。同时,要提醒用户注意表格范围最好使用绝对引用,比如$A$2:$C$100,这样在拖动公式时范围不会变化。 可能遇到的问题也需要考虑。比如,如果查找值不在表格的第一列,或者列索引号超过了表格的列数,函数会返回错误。此外,数据格式不一致也可能导致问题,比如查找值是数字,而表格中是文本格式的数字,这时候需要统一格式。还有,当出现#N/A错误时,可能是查找值不存在,或者匹配模式设置不正确,需要检查参数是否正确。 用户可能还会问到如何避免常见的错误,比如部分数据匹配出错的情况。这时候需要检查是否有多余的空格,或者数据格式不一致,或者表格范围没有锁定导致拖动时偏移。此外,XLOOKUP作为VLOOKUP的升级版,可能在某些情况下更方便,比如可以向左查找或者返回多列数据,这也是可以提及的内容。 最后,整理步骤,从基础语法到参数说明,再到具体案例,逐步引导用户理解如何使用VLOOKUP函数。同时,提供常见错误和解决方法,帮助用户在实际应用中避免问题。如果有必要,还可以比较VLOOKUP和其他查找函数的区别,比如HLOOKUP或XLOOKUP,但根据用户的问题,主要集中在VLOOKUP本身即可。</think>### Excel VLOOKUP函数详解 #### 一、基础语法与参数说明 VLOOKUP函数的语法为: $$=VLOOKUP(lookup\_value, table\_array, col\_index\_num, [range\_lookup])$$ 包含4个参数: 1. **lookup_value**(必填):要查找的值(如单元格引用或具体值) 2. **table_array**(必填):包含数据的表格范围(必须包含查找列和返回列) 3. **col_index_num**(必填):返回值所在列的序号(从table_array第一列开始计数) 4. **range_lookup**(可选):匹配类型 - `TRUE`/`1`:近似匹配(默认值,需数据升序排列) - `FALSE`/`0`:精确匹配(常用选项) [^1][^2] #### 二、使用步骤演示(工资表查询案例) 假设需要根据员工编号查询工资: 1. 建立查询单元格(如`B12`) 2. 输入公式: ```excel =VLOOKUP(A12, $A$2:$D$100, 4, 0) ``` - `A12`:待查询的员工编号 - `$A$2:$D$100`:锁定数据区域(绝对引用) - `4`:返回第4列(工资列) - `0`:精确匹配 [^2][^3] #### 三、常见错误与解决方法 | 错误现象 | 原因 | 解决方案 | |---------|------|---------| | #N/A | 查找值不存在 | 检查数据源或改用`IFERROR`容错 | | #REF! | 列序号超出范围 | 确认col_index_num ≤ 表格列数 | | 部分匹配失败 | 数据格式不一致 | 统一数值/文本格式 | | 结果错位 | 表格未锁定 | 使用`$`符号固定区域引用 | [^3][^4] #### 四、进阶技巧 1. **多条件查询**: 使用辅助列合并多个条件字段 ```excel =VLOOKUP(A2&B2, $D$2:$F$100, 3, 0) ``` 2. **通配符匹配**: `"*"`匹配任意字符,`"?"`匹配单个字符 ```excel =VLOOKUP("张*", $A$2:$C$100, 3, 0) ``` 3. **跨表查询**: 引用其他工作表数据 ```excel =VLOOKUP(A2, Sheet2!$A$2:$D$100, 4, 0) ``` [^1][^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值