k8s部署ingress-nginx的方法步骤

2023-05-16

1. ingress概述

我们知道service的表现形式为IP:PORT,即工作在第四层传输层(TCP/IP层),那么对于不同的URL地址经常对应用不同的后端服务或者虚拟服务器,这些应用层的转发机制仅通过kubernetes的service机制是无法实现的,这种情况我们可以使用ingress策略定义和一个具体的ingress Controller,两者结合实现一个完整的Ingress 负载均衡,这个负载均衡是基于nginx七层反向代理来实现。

k8s 对外暴露服务(service)主要有两种方式:NotePort, LoadBalance, 此外externalIPs也可以使各类service对外提供服务,但是当集群服务很多的时候,NodePort方式最大的缺点是会占用很多集群机器的端口;LB方式最大的缺点则是每个service一个LB又有点浪费和麻烦,并且需要k8s之外的支持; 而ingress则只需要一个NodePort或者一个LB就可以满足所有service对外服务的需求。工作机制大致可以用下图表示:
在这里插入图片描述
一种全局的、为了代理不同后端 Service 而设置的负载均衡服务,就是 Kubernetes 里的Ingress 服务。

Ingress由两部分组成:Ingress controller和Ingress服务。

Ingress Controller 会根据你定义的 Ingress 对象,提供对应的代理能力。业界常用的各种反向代理项目,比如 Nginx、HAProxy、Envoy、Traefik 等,都已经为Kubernetes 专门维护了对应的 Ingress Controller。
在这里插入图片描述

实际上,ingress相当于一个7层的负载均衡器,是k8s对反向代理的一个抽象。大概的工作原理也确实类似于Nginx,可以理解成在 Ingress 里建立一个个映射规则 , ingress Controller 通过监听 Ingress里的配置规则并转化成 Nginx 的配置 , 然后对外部提供服务。ingress包括:在这里有两个核心概念:

Ingress:kubernetes中的一个对象,作用是定义请求如何转发到service的规则

ingress controller: 核心是一个deployment,实现方式有很多,比如nginx, Contour, Haproxy,需要编写的yaml有:Deployment, Service, ConfigMap, ServiceAccount(Auth),其中service的类型可以是NodePort或者LoadBalancer。

Ingress(以nginx为例)的工作原理如下:
1、用户编写Ingress规则,说明那个域名对应kubernetes集群中的那个Service
2、Ingress Controller动态感知Ingress服务规则的变化,然后生成一段对应的Nginx反向代理配置
3、Ingress Controller会将生成的nginx配置写入到一个运行着的Nginx服务中,并动态更新
4、到此为止,其实真正在工作的就是一个Nginx了,内部配置了用户定义的请求转发规则
在这里插入图片描述

2、 ingress-nginx 部署(Ingress Controller+nginx)

官网:https://kubernetes.github.io/ingress-nginx/
网络不好可下载:百度网盘
yaml链接:https://pan.baidu.com/s/1DRuXSF-KOQ5wKz-nYEciRQ?pwd=o7r9
提取码:o7r9
镜像链接:https://pan.baidu.com/s/1p-fTf6ggGsQrDo_XIdUmXQ?pwd=9xi3
提取码:9xi3
应用ingress controller定义文件

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml

应用ingress-service定义文件

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
[root@k8s-master1 ~]# kubectl -n ingress-nginx get pod 
NAME                                        READY   STATUS    RESTARTS   AGE
nginx-ingress-controller-7f74f657bd-vrgg6   1/1     Running   0          106m
[root@k8s-master1 ~]# kubectl -n ingress-nginx get svc
NAME            TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx   NodePort   10.0.0.126   <none>        80:30726/TCP,443:30852/TCP   116m

3、准备service和pod

为了后面的实验比较方便,创建如下图所示的模型
在这里插入图片描述
1、创建tomcat-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1
        ports:
        - containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: tomcat-pod
  template:
    metadata:
      labels:
        app: tomcat-pod
    spec:
      containers:
      - name: tomcat
        image: tomcat:8.5-jre10-slim
        ports:
        - containerPort: 8080

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: dev
spec:
  ports:
    - port: 80
      name: nginx
  clusterIP: None
  selector:
    app: nginx-pod
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-service
  namespace: dev
spec:
  ports:
    - port: 8080
      name: tomcat
  clusterIP: None
  selector:
    app: tomcat-pod

创建
[root@k8s-master1 http]# kubectl apply -f tomcat-nginx.yaml 
deployment.apps/nginx-deployment created
deployment.apps/tomcat-deployment created
查看
[root@k8s-master1 http]# kubectl get svc -n dev
NAME             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
nginx-service    ClusterIP   None         <none>        80/TCP     59m
tomcat-service   ClusterIP   None         <none>        8080/TCP   59m

4、http代理

1、创建ingress-http.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-http
  namespace: dev
spec:
  rules:
  - host: nginx.itheima.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-service
          servicePort: 80
  - host: tomcat.itheima.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-service
          servicePort: 8080
#创建
[root@k8s-master1 http]# kubectl create -f ingress-http.yaml 
ingress.extensions/ingress-http created
#查看
[root@k8s-master1 http]# kubectl get ing ingress-http -n dev
NAME           HOSTS                                  ADDRESS   PORTS   AGE
ingress-http   nginx.itheima.com,tomcat.itheima.com             80      18s
#查看详细
[root@k8s-master1 http]# kubectl describe ing ingress-http -n dev
Name:             ingress-http
Namespace:        dev

  nginx.itheima.com   
                      /   nginx-service:80 (10.244.1.132:80,10.244.1.135:80,10.244.1.139:80)
  tomcat.itheima.com  
                      /   tomcat-service:8080 (10.244.1.129:8080,10.244.1.134:8080,10.244.1.140:8080)
Annotations:
Events:
  Type    Reason  Age   From                      Message
  ----    ------  ----  ----                      -------
  Normal  CREATE  48s   nginx-ingress-controller  Ingress dev/ingress-http
#查看ingress-controller得nginx配置是否发生修改
[root@k8s-master1 http]# kubectl exec -it nginx-ingress-controller-7f74f657bd-t8pvt sh -n ingress-nginx
/etc/nginx $ cat nginx.conf|grep nginx.itheima.com
	## start server nginx.itheima.com
		server_name nginx.itheima.com ;
	## end server nginx.itheima.com
/etc/nginx $ cat nginx.conf|grep tomcat.itheima.com
	## start server tomcat.itheima.com
		server_name tomcat.itheima.com ;
	## end server tomcat.itheima.com

2、测试http是否成功

#查看svc端口
[root@k8s-master1 http]# kubectl get svc -n ingress-nginx
NAME            TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx   NodePort   10.0.0.126   <none>        80:30726/TCP,443:30852/TCP   25h

进入windows编辑C:\Windows\System32\drivers\etc\hosts
在这里插入图片描述
进入谷歌访问
在这里插入图片描述
在这里插入图片描述

5、https代理

1、创建证书

#生成证书
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/C=CN/ST=BJ/L=BJ/O=nginx/CN=itheima.com"
#创建密钥
kubectl create secret tls tls-secret --key tls.key --cert tls.crt

创建ingress-https.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-https
  namespace: dev
spec:
  tls:
  - hosts:
    - nginx.itheima.com
    - tomcat.itheima.com
  rules:
  - host: nginx.itheima.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-service
          servicePort: 80
  - host: tomcat.itheima.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-service
          servicePort: 8080
#创建
[root@k8s-master1 http]# vim ingress-https.yaml
[root@k8s-master1 http]# kubectl create -f ingress-https.yaml
ingress.extensions/ingress-https created
#查看
[root@k8s-master1 http]# kubectl get ing ingress-https -n dev
NAME            HOSTS                                  ADDRESS      PORTS     AGE
ingress-https   nginx.itheima.com,tomcat.itheima.com   10.0.0.126   80, 443   41s
#查看详情和http不同的是多了TLS
[root@k8s-master1 http]# kubectl describe ing ingress-https -n dev
Name:             ingress-https
Namespace:        dev
Address:          10.0.0.126
TLS:
  SNI routes nginx.itheima.com,tomcat.itheima.com

  nginx.itheima.com   
                      /   nginx-service:80 (10.244.1.132:80,10.244.1.135:80,10.244.1.139:80)
  tomcat.itheima.com  
                      /   tomcat-service:8080 (10.244.1.129:8080,10.244.1.134:8080,10.244.1.140:8080)
Annotations:
Events:
  Type    Reason  Age   From                      Message
  ----    ------  ----  ----                      -------
  Normal  CREATE  66s   nginx-ingress-controller  Ingress dev/ingress-https
  Normal  UPDATE  37s   nginx-ingress-controller  Ingress dev/ingress-https

2、测试http是否成功

#查看svc端口
[root@k8s-master1 http]# kubectl get svc -n ingress-nginx
NAME            TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx   NodePort   10.0.0.126   <none>        80:30726/TCP,443:30852/TCP   25h

进入windows编辑C:\Windows\System32\drivers\etc\hosts
在这里插入图片描述
进入谷歌访问
进入谷歌访问
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s部署ingress-nginx的方法步骤 的相关文章

随机推荐

  • IDEA 2018.3.2 版本配置SVN

    IDEA 2018 3 2 版本配置SVN 1 首先安装TortoiseSVN2 配置IDEA3 IDEA开启SVN 1 首先安装TortoiseSVN 安装的过程中 xff0c 需要勾选command line client tools
  • springmvc 上传文件,单个文件,多个文件

    1 Java代码部分 xff1a 1 1spring配置 xff1a span class token operator lt span span class token operator span span class token ope
  • Jquery实现免上传预览图片功能

    Demo如下 span class token doctype lt DOCTYPE html gt span span class token tag span class token tag span class token punct
  • jQuery :not() 选择器

    JQ选择器 xff0c 不选择某些标签 基础用法 xff1a p not class 多个not p not class not id span class token doctype lt DOCTYPE html gt span spa
  • 弱智笔记 js用==比较 空字符串==0,返回true

    span class token keyword if span span class token punctuation span span class token string 34 34 span span class token o
  • PHP7+apache2.4环境搭建

    PHP 43 apache环境搭建 版本 xff1a PHP Version 7 1 30 apache2 4 下载 xff1a 下载php时 xff0c 注意下载VC14 x64 Thread Safe xff0c 否则没有php7apa
  • JAVA构造器注意事项

    JAVA构造器 1 JAVA默认提供无参构造器 2 默认无参构造器 对域进行初始化规则 数值型 xff1a 0 布尔类型 xff1a false 对象类型 xff1a null 3 如果自己写了一个带参构造器 xff0c 默认的无参构造器失
  • 原生大数据|elasticSearch|低版本kibana组件的汉化

    前言 xff1a 大数据的范畴里包括EFK ELK xff0c 这些套件安装部署是非常的成熟 xff0c 因此是比较好部署安装的 xff0c 一般的 xff0c 困难出现在部署完成后的运营和维护 kibana这个组件的版本低于7我们就应该认
  • JAVA继承-注意事项

    JAVA继承 1 子类所有构造器 xff0c 会隐式调用父类的无参构造器 原理 xff1a 子类所有构造器 xff0c 都会在第一行隐式调用super 问题 xff1a 如果父类没有无参构造器 xff0c 编译报错 解决 xff1a 在子类
  • mac上安装brew出错curl: Failed to connect to raw.githubusercontent.com port 443解决方法

    问题描述 由于最近重做了电脑系统 xff0c 重新下载安装brew 就报错了 xff0c raw githubusercontent com 在国内由于不可描述的原因就无法访问 解决方法一 参考网上的解决方法 首先是访问这个网址 https
  • Hexo + gitHub pages

    网址 xff1a https oldmee github io hexo的写作流程就是会按照日期自动帮你归类 xff0c 你new了一个page会生成一个markdown文件 xff0c 你就可以愉快的写作了 xff0c 边写边看效果 xf
  • 使用策略模式优化过多的if else语句

    此处的过多是指if else超过三层 xff0c 如下面的代码 xff1a public class MainStart public static void main String args String message 61 34 se
  • 在基于图像的深度学习中如何做数据的自动标注以及自动标注的等级介绍

    作者 xff1a Tobias Schaffrath Rosario 编译 xff1a ronghuaiyang 原文 xff1a 在基于图像的深度学习中如何做数据的自动标注以及自动标注的等级介绍 ronghuaiyang的博客 CSDN博
  • 【Java】 牛客网华为机试108题汇总

    文章目录 目录 目录 1 求字符串最后一个单词长度 2 计算字符串个数 3 明明的随机数 4 字符串分割 5 进制转换 6 质数因子 7 HJ19 简单错误记录 8 HJ25 数据分类处理 9 HJ30 字符串合并处理 1 求字符串最后一个
  • OpenCV的简单使用教程与基本函数(C++版本)

    OpenCV的简单使用教程 xff08 C 43 43 xff09 OpenCV简介OpenCV的使用基础打开 显示和保存图像图像存储变量 Mat类图像元素的存储读入图像文件创建Mat类复制Mat类图像元素的访问OpenCV画图命令行交互界
  • 【实用技巧】知网文献不限量免费下载方法,亲测可用

    众所周知 xff0c 知网可以查看和下载相关的文献资料 xff0c 只要用校园网就能免费的下载和查阅 xff0c 但是也有不少学校并没有和知网合作 xff0c 这样就没办法下载 xff0c 只能充钱才能享受 那么有没有白嫖的办法呢 xff1
  • git rm 删除 以及清空暂存区

    一 使用linux命令rm删除 xff1a 在当前工作区有文件readme txt xff0c 并被git跟踪 xff0c 且有提交历史 运行如下命令 xff1a rm readme txt 分析如下 xff1a xff08 1 xff09
  • centOS开启和关闭防火墙

    CentOS 7 0默认使用的是firewall作为防火墙 xff0c 在安装某些软件的时候就需要关闭防火墙 一 查看防火墙的状态 开启显示 running xff0c 关闭后显示 not running 执行命令 firewall cmd
  • postgresql|数据库|pg数据库的文件系统详解---最全面的解析

    前言 xff1a postgresql是一个非常成熟的开源的功能强大的关系型数据库 xff0c 总体来说 xff0c 该数据库安装简单 xff0c 使用复杂 xff0c 复杂度在多个维度都会有所体现 xff0c 比如 xff0c SQL语法
  • k8s部署ingress-nginx的方法步骤

    1 ingress概述 我们知道service的表现形式为IP PORT xff0c 即工作在第四层传输层 xff08 TCP IP层 xff09 xff0c 那么对于不同的URL地址经常对应用不同的后端服务或者虚拟服务器 xff0c 这些