当前位置: 首页 > news >正文

K8S中Ingress的使用

1. Ingress的介绍

1.1 Pod 的漂移

Kubernetes 具有强大的副本控制能力,能保证在任意副本(Pod)挂掉时自动从其他机器启动一个新 的,还可以动态扩容等,通俗地说,这个 Pod 可能在任何时刻出现在任何节点上,也可能在任何时刻死 在任何节点上;那么自然随着 Pod 的创建和销毁,Pod IP 肯定会动态变化;那么如何把这个动态的 Pod IP 暴露出去?这里借助于 Kubernetes 的 Service 机制,Service 可以以标签的形式选定一组带有指定标签的 Pod,并监控和自动负载他们的 Pod IP,那么我们向外暴露只暴露 Service IP 就行了;这就是 NodePort 模式:即在每个节点上开起一个端口,然后转发到内部 Pod IP 上。

客户端请求-->node 节点的 ip:端口--->service 的 ip:端口--->pod 的 ip:端口

1.2 Ingress 介绍

Ingress 官网定义:Ingress 可以把进入到集群内部的请求转发到集群中的一些服务上,从而可以把服务映射到集群外部。Ingress 能把集群内 Service 配置成外网能够访问的 URL,流量负载均衡,提供基于 域名访问的虚拟主机等。

1.3 Ingress Controller 介绍

Ingress Controller 是一个七层负载均衡调度器,客户端的请求先到达这个七层负载均衡调度器,由七层 负载均衡器在反向代理到后端 pod,常见的七层负载均衡器有 nginx、traefik,以我们熟悉的 nginx 为 例,假如请求到达 nginx,会通过 upstream 反向代理到后端 pod 应用,但是后端 pod 的 ip 地址是一 直在变化的,因此在后端 pod 前需要加一个 service,这个 service 只是起到分组的作用,那么我们 upstream 只需要填写 service 地址即可。

1.4 Ingress 和 Ingress Controller 总结

Ingress Controller 可以理解为控制器,它通过不断的跟 Kubernetes API 交互,实时获取后端 Service、Pod 的变化,比如新增、删除等,结合 Ingress 定义的规则生成配置,然后动态更新上边的 Nginx 或者 trafik 负载均衡器,并刷新使配置生效,来达到服务自动发现的作用。

Ingress 则是定义规则,通过它定义某个域名的请求过来之后转发到集群中指定的 Service。它可以通过 Yaml 文件定义,可以给一个或多个 Service 定义一个或多个 Ingress 规则。

2. Ingress 完整实战指南

2.1 获取官方部署文件

https://github.com/kubernetes/ingress-nginx/releases

## 获取文件 我这里的文件版本是 1.5.1
curl -O https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.5.1/deploy/static/provider/baremetal/deploy.yaml

2.2 部署前修改YAML文件

## 1. 这里我修改了nodePort的端口范围,在command的字段下面添加如下参数
[root@k8s-master /etc/kubernetes/manifests]# grep    service-node-port kube-apiserver.yaml- --service-node-port-range=80-32767
## 2. 重启kube-apiserver## 下载的 deploy.yaml 包含完整的 RBAC、Deployment 等配置。默认使用 LoadBalancer 类型 Service,需要改为 NodePort.
...
---
apiVersion: v1
kind: Service
metadata:labels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/component: controllername: ingress-nginx-controllernamespace: ingress-nginx
spec:type: NodePortports:- name: httpport: 80protocol: TCPtargetPort: httpnodePort: 80- name: httpsport: 443protocol: TCPtargetPort: httpsnodePort: 443selector:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/component: controller
...
---

2.3 部署controller

# 1. 直接应用部署后的yaml文件
[root@k8s-master /manifests/ingress]# kubectl  apply -f deployment.yaml
# 2. 查看pod状态
[root@k8s-master /manifests/ingress]# kubectl get pods -n ingress-nginx
NAME                                       READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-89769d8f9-kjcsg   1/1     Running   0          32m# 3. 检查 service
[root@k8s-master /manifests/ingress]# kubectl get svc -n ingress-nginx
NAME                       TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)                 AGE
ingress-nginx-controller   NodePort   10.200.132.122   <none>        80:80/TCP,443:443/TCP   33m# 4. 查看 controller 日志
[root@k8s-master /manifests/ingress]# kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx -f

3. 创建测试应用

3.1 部署应用v1

[root@k8s-master /manifests/ingress]# cat tomcat-demo.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: ingress-tomcat
spec:replicas: 2selector:matchLabels:app: tomcattemplate:metadata:labels:app: tomcatspec:containers:- name: tomcatimage: 192.168.0.77:32237/library/tomcat:alpine ports:- name: httpcontainerPort: 8080name: ajpcontainerPort: 8009---
apiVersion: v1
kind: Service
metadata:name: service-tomcat
spec:selector:app: tomcatports:- name: httptargetPort: 8080port: 8080- name: ajptargetPort: 8009port: 8009## 检查 pod 和 service
[root@k8s-master /manifests/ingress]# kubectl  get pod,svc 

4. 核心ingress的配置

4.1 基础单路由配置

[root@k8s-master /manifests/ingress]# cat ingress-basic.yaml
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:name: tomcat
spec:controller: k8s.io/ingress-nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: basic-ingressnamespace: default
spec:## ingressClassName 要一直ingressClassName: tomcat ## 定义后端转发的规则rules:## #通过域名进行转发 - host: tomcat.lucky.comhttp:paths:- path: /pathType: Prefix## 配置后端服务 backend:## service的名称要一直service:name: service-tomcat port:number: 8080## 检查ingress
[root@k8s-master /manifests/ingress]# kubectl  get ingress
NAME            CLASS    HOSTS              ADDRESS         PORTS   AGE
basic-ingress   tomcat   tomcat.lucky.com   192.168.0.162   80      7m11s[root@k8s-master /manifests/ingress]# kubectl  describe ingress basic-ingress

4.2 访问

--- 1. 在window的电脑上修改hosts文件:
C:\
Windows\System32\drivers\etc
--- 2. 管理员打开hosts 文件,增加一下内容
192.168.0.162 tomcat.lucky.com--- 3. 浏览器域名访问

4.3 Ingress 的https代理配置

--- 1. 创建自签证书(测试用)
[root@k8s-master /manifests/ingress]# openssl req -x509 -nodes -days 365 -newkey rsa:2048   -keyout tls.key -out tls.crt   -subj "/CN=tomcat.lucky.com"--- 2. 创建 Secret
[root@k8s-master /manifests/ingress]# kubectl create secret tls tomcat-ingress-secret    --cert=tls.crt --key=tls.key  --namespace=default-- 3. 查看
[root@k8s-master /manifests/ingress]# kubectl  describe  secret tomcat-ingress-secret--- 4. 修改yaml文件
[root@k8s-master /manifests/ingress]# cat ingress-basic-tls.yaml 
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:name: tomcat
spec:controller: k8s.io/ingress-nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: basic-ingressnamespace: default
spec:ingressClassName: tomcat ## 添加tls信息tls:- hosts:- tomcat.lucky.com## secret 名称secretName: tomcat-ingress-secretrules:- host: tomcat.lucky.comhttp:paths:- path: /pathType: Prefixbackend:service:name: service-tomcat port:number: 8080
--- 4. 浏览器通过https的方式访问

如果想详细了解更多知识的小伙伴可以参考我的个人博客:

https://xingzhibang.top/

http://www.dtcms.com/a/594261.html

相关文章:

  • 怎么建立微信网站あかねさす少女免费
  • 基于单片机的多波形信号发生器设计
  • JAVA1110 反射 泛型
  • 设计网站大全软件网络营销有哪些功能
  • 余江网站建设河南郑州百姓网
  • 济南莱芜最新消息seo平台是什么意思
  • 银河麒麟高级服务器操作系统V10SP3 2403(X86)PXE服务端部署以及测试
  • 安徽建站优化哪里有八戒八戒在线观看免费完整版
  • 远距离视频传输无线模块:打破空间限制的未来科技
  • Linux网络编程—网络基础概念
  • 硬件基础知识-电容(一)
  • 做网站需要多少钱怎么做网站的百度收录
  • 什么软件可以做网站百度站长平台怎么验证网站
  • 网站建设定制网络营销方式哪些?
  • Python | range数据类型、for循环及应用方式
  • 怎么仿一个复杂的网站wordpress怎么写时间轴
  • HTML5 表单属性详解
  • 官网国产化改造,为何首选PageAdmin CMS?
  • 传感器监测精度:压电 / 温度传感器对心率 / 呼吸信号的捕捉效率测试
  • 十堰优化网站哪家好有免费做推广的网站吗
  • 网站空间如何续费南昌企业建站系统
  • 底层视觉及图像增强-项目实践(十六-0-(4):从“调屏经验”到“AI慧眼【神经网络、卷积】”的思维跃迁):从奥运大屏,到手机小屏,快来挖一挖里面都有什么
  • dede网站安全东莞金融网站建设
  • 网站页面设计尺寸彩云小梦ai写作网站
  • 培训考试系统源码重要吗
  • Swift-GCD和NSOperation
  • 移动硬盘安装Ubuntu系统——Ubuntu与Windows时间不一致(详细版)_002
  • 【计算思维】蓝桥杯STEMA 科技素养考试真题及解析 3
  • 昆明餐饮网站建设建设摩托车官网报价
  • 深圳公司建站推广保定市城乡建设局官方网站