k8s ingress (二)

这篇具有很好参考价值的文章主要介绍了k8s ingress (二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

k8s ingress ()

Ingress介绍

在前面课程中已经提到,Service对集群之外暴露服务的主要方式有两种:NodePort和LoadBalancer,但是这两种方式,都有一定的缺点:

NodePort方式的缺点是会占用很多集群机器的端口,那么当集群服务变多的时候,这个缺点就愈发明显

LB方式的缺点是每个service需要一个LB,浪费、麻烦,并且需要kubernetes之外的设备的支持。

基于这种现状,kubernetes提供了Ingress资源对象,Ingress只需要一个NodePort或者一个LB就可以满足暴露多个Service的需求。工作机制大致如下图表示:

k8s ingress (二),贪心算法,算法

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

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

ingress controller:具体实现发向代理及负载均衡的程序,对ingress定义的规则进行解析,根据配置的规则来实现请求转发,实现方式有很多,比如Nginx、Contour、Haproxy等等。

Ingress(以Nginx为例)的工作原理如下:

用户编写Ingress规则,说明哪个域名对应kubernetes集群中欧冠的哪个Service

Ingress控制器动态感知Ingress服务规则的变化,然后生成一段对应的Nginx配置

Ingress控制器会将生成的Nginx配置写入到一个运行着Nginx服务中,并动态更新

到此为止,其实真正在工作的就是Nginx了,内部配置了用户定义的请求转发规则

Ingress 环境准备

k8s ingress (二),贪心算法,算法

在ELB下的监听器中,可以通过监听器协议和端口来判断是4层还是7层的。

如果监听器协议是TCP或UDP,那么该监听器是4层的。这种监听器只能根据目标端口将流量转发到后端实例,不能对流量进行任何处理。

如果监听器协议是HTTP或HTTPS,那么该监听器是7层的。这种监听器可以根据请求的URL、HTTP头部等信息对流量进行处理,并将流量转发到后端实例。

此外,还可以通过监听器端口来判断是4层还是7层的。如果监听器端口是80或443,那么该监听器是7层的;如果监听器端口是其他端口,那么该监听器是4层的

Ingress 的使用

Ingress 环境准备

# 创建文件夹

[root@master ~]# mkdir ingress-controller

[root@master ~]# cd ingress-controller/

# 获取ingress-nginx,本次案例使用的是0.30版本

[root#master ingress-controller]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml

[root#master ingress-controller]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml

# 修改mandatory.yaml文件中的仓库(本人实验不需要修改也可以)

# 修改quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0

# 为quay-mirror.qiniu.com/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0

# 创建ingress-nginx

[root@master ingress-controller]# kubectl apply -f ./

# 查看ingress-nginx

[root@master ingress-controller]# kubectl get pod -n ingress-nginx

NAME                                                                           READY    STATUS         RESTARTS             AGE

pod/nginx-ingress-controller-fbf967dd5-4qpbp    1/1         Running        0                            12h

# 查看service

[root@master ingress-controller]# kubectl get svc -n ingress-nginx

NAME                   TYPE             CLUSTER-IP          EXTERNAL-IP PORT(S)                                     AGE

ingress-nginx NodePort      10.98.75.163  <none>         80:32240/TCP,443:31335/TCP    11h

准备servicepod

为了后面的实验比较方便,创建如下图所示的模型

k8s ingress (二),贪心算法,算法

创建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: tomat-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: 

  selector:   

    app: nginx-pod 

  clusterIP: None 

  type: ClusterIP 

  ports: 

  - port: 80   

    targetPort: 80

---

apiVersion: v1

kind: Service

metadata: 

  name: tomcat-service 

  namespace: dev

spec: 

  selector:

    app: tomcat-pod 

  clusterIP: None 

  type: ClusterIP 

  ports: 

  - port: 8080   

targetPort: 8080

# 创建[root@master ~]# kubectl create -f tomcat-nginx.yaml

# 查看

[root@master ~]# kubectl get svc -n dev

NAME                          TYPE                    CLUSTER-IP                 EXTERNAL-IP        PORT(S)         AGE

nginx-service       ClusterIP        None                           <none>                80/TCP          48s

tomcat-service            ClusterIP        None                           <none>                8080/TCP      48s

Http代理

创建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@master ~]# kubectl create -f ingress-http.yaml

ingress.extensions/ingress-http created

# 查看

[root@master ~]# kubectl get ing ingress-http -n dev

NAME                   HOSTS                                                    ADDRESS                     PORTS           AGE

ingress-http  nginx.itheima.com,tomcat.itheima.com                          80                 22s

# 查看详情

[root@master ~]# kubectl describe ing ingress-http -n dev

...

Rules:

Host                     Path backends

----                            ----       --------

nginx.itheima.com /             nginx-service:80(10.244.1.96:80,10.244.1.97:80,10.244.2.112.80)

tomcat.itheima.com     /             tomcat-service:8080(10.244.1.94:8080,10.244.1.95:8080,10.244.2.111.8080)

# 接下来,在本地电脑配置host文件,解析上面的两个域名到192.168.109.100(master)上

# 然后,就可以分别访问tomcat.itheima.com:32240 和nginx.itheima.com:32240 查看效果了

Https代理

创建证书

# 生成证书

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/C=CN/ST=BJ/L=BJ/0=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

      secretName: tls-secret # 指定秘钥

  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

# 创建 inress

[root@master ~]# kubectl create -f ingress-https.yaml

ingress.extensions/ingress-https created

# 查看

[root@master ~]# kubectl get ing ingress-https -n dev

NAME                   HOSTS                                                           ADDRESS                     PORTS    AGE

ingress-https nginx.itheima.com,tomcat.itheima.com     10.104.184.38 80, 443       2m42s

# 查看详情

[root@master ~]# kubectl describe ing ingress-https -n dev

...

TLS:

  tls-secret terminates nginx.itheima.com,tomcat.itheima.com

Rules:

Host                     Path backends

----                            ----       --------

nginx.itheima.com /             nginx-service:80(10.244.1.97:80,10.244.1.98:80,10.244.2.119.80)

tomcat.itheima.com     /             tomcat-service:8080(10.244.1.99:8080,10.244.2.117:8080,10.244.2.120.8080)

# 下面可以通过浏览器访问https://nginx.itheima.com:31335 和 https://tomcat.itheima.com:31335来查看了文章来源地址https://www.toymoban.com/news/detail-666855.html

到了这里,关于k8s ingress (二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s之ingress

    ingress基于域名进行映射,把url(http https)的请求转发到service,再由service把请求转发到每一个pod ingress只要一个或者少量的公网ip或者LB,可以把多个http请求暴露到外网,七层反向代理 理解为service的service,是一组基于域名和URL路径,把一个或者多个请求转发到service 先是七层代

    2024年01月19日
    浏览(49)
  • K8S--Ingress的作用

    原文网址:K8S--Ingress的作用-CSDN博客 本文介绍K8S的Ingress的作用。 Kubernetes 暴露服务的有三种方式:LoadBlancer Service、NodePort Service、Ingress。官网的定义:管理对外服务到集群内服务之间规则的集合。即:将请求转发到服务,实现服务暴露。 Ingress的功能类似Nginx:把集群内 Ser

    2024年01月17日
    浏览(41)
  • k8s Ingress使用详解

    在上一篇关于k8s之service的使用一篇中提到,Service对集群之外暴露服务的主要方式有两种,NotePort和LoadBalancer,但这两种方式,都有一定的缺点,具体来说: NodePort 会占用很多集群机器的端口,当集群服务变多的时候,过多的端口会给k8s的运维人员带来诸多的不便; 而LB的缺

    2024年02月02日
    浏览(50)
  • 【K8s】Ingress的使用

    上一章中,NotePort和LoadBalancer类型的Service可给集群外部机器提供访问,但这两种类型都有缺点: NodePort方式会占用很多集群机器的端口,当集群服务变多的时候,这个缺点愈发明显 LB方式的缺点是每个service需要一个LB,浪费、麻烦,并且需要k8s之外设备的支持 由此,Ingress资

    2024年04月10日
    浏览(78)
  • k8s---对外服务 ingress

    目录 目录 ingress与service ingress的组成 ingress-controller: ingress暴露服务的方式 2.方式二:DaemonSet+hostnetwork+nodeSelector DaemonSet+hostnetwork+nodeSelector如何实现 3.deployment+NodePort: 虚拟主机的方式实现http代理 总结 deploymentit+loadbalancer: daemonset+hostnetwork+nodeselector: deployment+nodeport: serv

    2024年01月22日
    浏览(53)
  • [云原生] K8s之ingress

    1.1 Ingress的简介  service的作用体现在两个方面,对集群内部,它不断跟踪pod的变化,更新endpoint中对应pod的对象,提供了ip不断变化的pod的服务发现机制;对集群外部,他类似负载均衡器,可以在集群内外部对pod进行访问。 在Kubernetes中,Pod的IP地址和service的ClusterIP仅可以在集

    2024年04月11日
    浏览(37)
  • K8S对外服务ingress

    集群内部 不断跟踪pod的变化,更新endpoint中的pod对象,基于pod的ip地址不断发现的一种服务发现机制 集群外部 类似负载均衡器,把流量(ip+端口),不涉及转发url(http https),把请求转发到pod当中 在Kubernetes中,Pod的IP地址和service的ClusterIP仅可以在集群网络内部使用,对于集

    2024年01月19日
    浏览(53)
  • K8s的Service、Ingress

    ● 在kubernetes中,Pod是应用程序的载体,我们可以 通过Pod的IP 来访问应用程序,但是 Pod的IP地址 不是固定的,这就意味着不方便直接采用Pod的IP对服务进行访问。 ● 为了解决这个问题,kubernetes提供了Service资源,Service会对提供同一个服务的 多个Pod进行聚合 ,并且 提供一个

    2024年02月05日
    浏览(44)
  • k8s 负载均衡工具Ingress

    Kubernetes是一种流行的容器编排平台,它提供了一种简单而强大的方式来管理容器化应用程序。Kubernetes Ingress是一种用于管理HTTP和HTTPS流量的API对象。它允许您将多个服务公开到Internet上,并提供负载均衡、TLS终止和基于主机名的路由等功能。本文将介绍Kubernetes Ingress的概念、

    2024年02月12日
    浏览(54)
  • k8s---ingress对外服务(ingress-controller)

    k8s的对外服务,ingress service作用现在两个方面: 1、集群内部:不断跟踪的变化,更新endpoint中的pod对象,基于pod的ip地址不断变化的一种服务发现机制。 2、集群外部:类似于负载均衡器,把流量(ip+端口),不涉及转发url(http https),把请求转发到pod当中。 service: NodePo

    2024年01月19日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包