k8s-ingress一

Comfigmap:存储数据

Date:

Key:value

挂载的方式,把配置信息传给容器

生产当中的yml文件很长:

有deployment

容器的探针

资源限制

Configmap

存储卷

Service

Ingress

K8s的对外服务,ingress

Service作用体现在两个方面:

  1. 集群内部:不断跟踪pod的变化,更新endpoint中的pod对象,基于pod的IP地址不断变化的一种服务发现机制
  2. 集群外部:类似于负载均衡器,把流量IP+端口,不涉及url(http https),把请求转发到pod当中

Service:

NodePort:容器端口---service端口----NodePort,设定了nodePort,每个节点都会有一个端口被打开,30000-32767

IP+端口:节点IP+30000-32767,实现负载均衡

Loadbalancer:云平台上的一种service机制,云平台一个负载均衡IP地址

Extrenal:域名映射

Ingress:基于域名进行映射,把url(http,https)请求转发到service,再由service把请求转发到每一个pod

Ingress只要一个或者少量的公网IP或者LB,可以把多个http请求暴露到网外,七层反向代理

Service的service。是一组基于域名和url路径,把一个或者多个请求转发到service的规则

先是七层代理---四层代理-----pod

Ingress service nginx

Ingress的组成:

Ingress是一个api对象,通过yaml文件来进行配置,ingress的作用是定义请求如何转发到service的规则,配置模板

Ingress通过http和https暴露集群内部service,给service提供一个外部的URL,负载均衡,ssl/tsl(https)的能力,实现了一个基于域名的负载均衡

Ingress-controller: 具体的实现反向代理和负载均衡的程序,对ingress定义的规则进行解析,根据ingress的配置规则进行请求的转发,Ingress-controller不是k8s自带的组件功能,ingress-controller一个统称

例如nginx ingress controller,traefik都是Ingress-controller,他们都是开源的

Ingress资源的定义项:

  1. 定义外部流量的规则
  2. 定义服务的暴露方式,主机名,访问路径和其他的选择
  3. 负载均衡(ingress-controller)

ingress-controller的运行方式是pod方式运行在集群当中

Nginx-ingress-controller:

如何下载:

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml

Ingress暴露服务的方式:

  1. 方式一:deployment+LoadBalance模式,ingress部署在公有云,ingress配置文件里面会有一个type,type:LoadBalancer. 公有云平台会为个Loadbalance的service创建一个负载均衡器,绑定一个公网地址。通过域名指向这个公网地址就可以实现集群对外暴露

  2. 方式二:daemonset+hostnetwork+nodeSelector模式:

解析:

Daemonset:在每个节点都会创建一个pod

Hostnework:pod共享节点主机的网络命名空间,容器内直接使用节点主机的IP+端口。Pod当中的容器可以直接访问网络资源

nodeSelector:根据标签来选择部署的节点,Nginx-ingress-controller部署的节点

缺点:直接利用了节点主机的网络和端口,一个node只能部署一个ingress-controller pod比价适合大并发的生产环境,性能是最好的

核心图:

  1. 方式三:deployment+NodePort 方式

实验演示方式一实现:

1、下载nginx ingress contoller控制器

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml

修改一下配置文件:

创建标签:

kubectl get pod -n ingress-nginx -o wide

上传控制器镜像,也就是nginx-ingress-controller的镜像:拖入每个节点

tar -xf ingree.contro-0.30.0.tar.gz

docker load -i ingree.contro-0.30.0.tar

在controller控制器创建的pod的节点上查看端口

netstat -antp|grep nginx

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 27897/nginx: master

tcp 0 0 0.0.0.0:8181 0.0.0.0:* LISTEN 27897/nginx: master

tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 27897/nginx: master

解析:8081端口,nginx-controller默认配置的一个bachend,反向代理的端口

所有请求当中,只要是不符合ingress配置的请求会转发到8081,相当于error的界面

  1. 定义yml脚本,创建pvc、pod、service、ingress

kubectl get pod -o wide

映射

vim /etc/hosts

测试访问

负载均衡已经实现(分别查看三个容器的日志)

结论:endpointIP地址变化

如何实现第二种方式:

如何实现deployment+nodePort (常见模式)

将之前的全部删除

下载nginx ingress contoller控制器

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml

将原来的基于daemonset删除ingress删除

下载service-nodeport控制器

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml

定义yml脚本,创建pvc、pod、service、ingress

做映射,端口可以随便写

结构图:

解析图:

三种模式:

Nginx-ingress-controller

Host--->ingress的配置找到pod----controller---请求发送到pod

NodePort----controller---ingress-----service----pod

NodePort暴露端口的方式是最简单的方法,NodePort多了一层NAT,(地址转换)

并发量大的对性能会有一定影响,内部会有NodePort

虚拟主机的方式实现http代理:

创建多个pod、service

pod1、service1

pod2、service2

配置ingress

做映射:

总结:

Ingress的核心组件----nginx-ingress-controller和traefik

他们都是开源的ingress--controller

三种方式:

Deployment+loadbalancer需要云平台提供一个负载均衡的公网地址,公有云上做(需要钱)

Daemonset+hostnetwork+nodeselector指定节点部署controller,缺点就是和宿主机共享网络,只能是一个controller的pod

Deployment+NodePort最常见,最简单的方式,其中一个nodeport端口,所有的ingress的请求都会转发到NodePort,然后service把流量转发到pod,一个nginx的NodePort,实现访问多个虚拟主机

和nginx类型:

一个端口可以访问多个

例如:80端口,可以访问www.test1.com www.test2.com

相关推荐
富士康质检员张全蛋7 分钟前
云原生|kubernetes|kubernetes的etcd集群备份策略
云原生·kubernetes·etcd
慧一居士22 分钟前
Kubernetes 中kind类型和各类型详细配置完整示例介绍
云原生·kubernetes·yaml配置
云手机管家2 小时前
CDN加速对云手机延迟的影响
运维·服务器·网络·容器·智能手机·矩阵·自动化
孤的心了不冷2 小时前
【Docker】CentOS 8.2 安装Docker教程
linux·运维·docker·容器·eureka·centos
头疼的程序员3 小时前
docker学习与使用(概念、镜像、容器、数据卷、dockerfile等)
学习·docker·容器
淡水猫.3 小时前
hbit资产收集工具Docker(笔记版)
运维·docker·容器
水淹萌龙8 小时前
k8s 中使用 Service 访问时NetworkPolicy不生效问题排查
云原生·容器·kubernetes
alden_ygq11 小时前
K8S cgroups详解
容器·贪心算法·kubernetes
旧故新长12 小时前
访问 Docker 官方镜像源(包括代理)全部被“重置连接”或超时
运维·docker·容器
matrixlzp12 小时前
K8S Gateway AB测试、蓝绿发布、金丝雀(灰度)发布
kubernetes·gateway·ab测试