K8S有了Service,为什么还要Ingress?

1、有了Service为什么还要Ingress?

NodePort对外暴露端口存在的不足

  • 一个端口只能一个服务使用, 端口需要提前规划。

  • 随着业务扩展, 端口的管理将是一个头疼的问题

  • 只支持4层的负载均衡

LoadBalancer存在的不足

  • 贵、贵、贵。

  • 要上云(俗话说上云容易下云难)

Ingress(最佳对外暴露端口方案-性价比高)

  • Ingress:

    • Ingress是K8s中的一个抽象资源,给管理员提供一个暴露应用的入口定义方法

    • Ingress公开了从集群外部到集群内服务的HTTP和HTTPS路由的规则集合

  • Ingress Controller

    • Ingress Controller根据Ingress生成具体的路由规则,并对Pod负载均衡器

    • Ingress Controller实质作用就是根据域名进行转发

图片

2、Ingress Controller 如何工作的?

  • Ingress Contronler通过与 Kubernetes API 交互,动态的去感知集群中 Ingress 规则变化,然后读取它

  • 按照自定义的规则,规则就是写明了哪个域名对应哪个service,生成一段 Nginx 配置,应用到管理的Nginx服务,然后热加载生效。

  • 以此来达到Nginx负载均衡器配置及动态更新的问题。

  • 流程包流程:客户端 ->Ingress Controller(nginx) -> 分布在各节点Pod

3、安装Ingress Controller

  • 这里使用 ingress-nginx 作为控制器

    • 除了ingress-nginx还有很多控制器:APISIX、HAProxy Ingress(opens new window)等

    • 其他控制器:https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/

    • 各种Ingress控制器横向对比

图片

  • 部署文件注意事项:(修改两个地方)

    • (第一处)镜像地址修改成国内的:registry.aliyuncs.com/google_containers/nginx-ingress-controller:v0.48.1

    • (第二处)将Ingress Controller暴露,一般使用宿主机网络(hostNetwork: true)或者使用NodePort

[root@k8s-master ~]# wget https://github.com/kubernetes/ingress-nginx/blob/controller-v0.48.1/deploy/static/provider/baremetal/deploy.yaml
[root@k8s-master ~]# cp deploy.yaml ingress-controller.yaml   # 重命名方便理解文件[root@k8s-master ~]# vi ingress-controller.yaml   # 修改下面这两个地方
hostNetwork: true                # 第一处,在containers同级上添加"hostNetwork: true"
containers:- name: nginx-ingress-controller# image: k8s.gcr.io/ingress-nginx/controller:v0.48.1image: registry.aliyuncs.com/google_containers/nginx-ingress-controller:v0.48.1   # 第二处,注释原有国外镜像,修改成国内的个人镜像
  • 部署Ingress Controller : 部署完成可以看到宿主机监听了 80和 443端口

    
    [root@k8s-master ~]# kubectl apply -f ingress-controller.yaml  
    [root@k8s-master ~]# kubectl get pods,svc -n ingress-nginx -o wide
    NAME                              READY   STATUS    RESTARTS   AGE   IP      NODE    NOMINATED NODE   READINESS GATES
    pod/nginx-ingress-controller-5dc64b58f-fljtd   1/1    Running   0    14m   192.168.56.62   k8s-node1   <none>      <none>

使用Ingress 部署应用

4、部署Service

图片

[root@k8s-master ~]#  vim app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: web1namespace: default
spec:replicas: 3selector:matchLabels:app: web1template:metadata:labels:app: web1spec:containers:- name: webimage: nginx:1.18
---
apiVersion: v1
kind: Service
metadata:name: web1namespace: default
spec:ports:- port: 80        # Service端口protocol: TCP    # 协议targetPort: 80   # 容器端口(程序启动端口,比如django默认是8000端口)selector: app: web1      # 指定关联Pod的标签(上面已经查到了,app=web1)type: ClusterIP      # 服务类型[root@k8s-master ~]# kubectl apply -f app.yaml 
[root@k8s-master ~]# kubectl get pods,svc

5、创建Ingress规则


[root@k8s-master ~]# vim ingress-web1.yamlapiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: web1
spec:rules:- host: web1.example.comhttp:paths:- path: /pathType: Prefixbackend:service:name: web1port:number: 80[root@k8s-master ~]# kubectl apply -f ingress-web1.yaml
[root@k8s-master ~]# kubectl get ingress            # 查看创建的资源
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
NAME   CLASS    HOSTS              ADDRESS   PORTS   AGE
web1   <none>   web1.example.com             80      2m

6、配置域名解析

  • 修改 C:\Windows\System32\drivers\etc\hosts 记录

  • 添加:192.168.56.62 web1.example.com

  • 因为刚刚创建的 Ingress被部署到了 192.168.56.62 机器中,所以这里使用域名解析也必须是它

    [root@k8s-master ~]# kubectl get pods,svc -n ingress-nginx -o wide
    NAME                              READY   STATUS    RESTARTS   AGE   IP      NODE    NOMINATED NODE   READINESS GATES
    pod/nginx-ingress-controller-5dc64b58f-fljtd   1/1    Running   0    14m   192.168.56.62   k8s-node1   <none>      <none>

    Ingress Controller高可用方案

  • 上面部署方案很明显,Ingress Controller只部署到了其中一台节点上,这样是单点故障

7、使用DaemonSet重新部署Ingress Controller


[root@k8s-master ~]# kubectl delete deploy nginx-ingress-controller -n ingress-nginx   # 删除ingress-nginx服务
[root@k8s-master ~]# vim ingress-controller.yaml    # 修改配置
# 1) 将 kind: Deployment 修改成 ==》 kind: DaemonSet
# 2)删除 replicas: 1 这行配置
[root@k8s-master ~]# kubectl apply -f ingress-controller.yaml
  • 可以看到 k8s集群中所有节点都部署了 ingress-controller(所有节点这样就都可以访问服务了)


[root@k8s-master ~]# kubectl get pods,svc -n ingress-nginx -o wide
NAME                       READY   STATUS    RESTARTS   AGE   IP              NODE    NOMINATED NODE   READINESS GATES
pod/nginx-ingress-controller-f9wvw   1/1     Running   0          56m   192.168.56.62   k8s-node1   <none>           <none>
pod/nginx-ingress-controller-wpf6w   1/1     Running   0          56m   192.168.56.63   k8s-node2   <none>           <none>

8、企业中部署Ingress方法

  • 上面DaemonSet在所有k8s节点都部署了 Ingress Controller,但是真实环境肯k8s集群太大,容易浪费资源

  • 所以,一般Ingress Controller会以==DaemonSet+nodeSelector==部署到几台特定的node节点中

  • 然后将这几台挂载到公网负载均衡器对外提供服务

图片

当然, 我们生产环境采用的和上面有些区别, 我们是将Controller以deployment 的形式部署的,数量一般控制在20个以内,交给租户去自行调节。使用F5直接负载这20个固定的Controller Pod IP。更为彻底规避了NodePort 端口管理的问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/16682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

需求跟踪矩阵是什么?怎么创建?一文详解

一、什么是需求跟踪矩阵 对项目经理或产品经理来说&#xff0c;需求清单肯定不陌生&#xff0c;那什么是需求跟踪矩阵呢&#xff1f; 需求跟踪矩阵&#xff08;Requirement Track Matrix&#xff0c;简称RTM &#xff09;&#xff0c;是把产品需求从其来源连接到能满足需求的…

无人机助力光伏项目测绘建模

随着全球对可再生能源需求的不断增长&#xff0c;光伏项目作为其中的重要一环&#xff0c;其建设规模和速度都在不断提高。在这一背景下&#xff0c;如何高效、准确地完成光伏项目的测绘与建模工作&#xff0c;成为了行业发展的重要课题。近年来&#xff0c;无人机技术的快速发…

哪个品种能够叫板白银现货t+d?

白银TD是在上海黄金交易所挂牌的白银投资品种&#xff0c;它可以说是国内版的现货白银交易&#xff0c;大家也可以把它理解成为白银交易的“快速通道”。通过它&#xff0c;投资者可以更加灵活地买卖白银&#xff0c;实现对内地白银价格的跟踪&#xff0c;并获得一定的杠杆化收…

git工作流程

以财务开发为例子&#xff1a; 1. 新建分支 1.1. upstream新建分支&#xff1a;finance-feature 1.2. origin新建对应分支&#xff1a;finance-feature 1.3 新建本地分支 git branch finance-feature 注&#xff1a; 同步远程分支&#xff1a;git fetch upstream feature…

CSDN智能总结助手

github项目地址&#xff1a; https://github.com/anjude/little-demo/tree/master 获取CSDN的user name和user token 打开csdn&#xff0c;打开控制台 - Application - Cookies&#xff0c;找到domain为blog.csdn.net的cookie&#xff0c;复制user_name和user_token的值 把上…

最详细Linux提权总结(建议收藏)

1、内核漏洞脏牛提权 查看内核版本信息 uname -a 具体提权 1、信息收集配合kali提权 uname -a #查看内核版本信息 内核版本为3.2.78&#xff0c;那我们可以搜索该版本漏洞 searchsploit linux 3.2.78 找到几个可以使用的脏牛提权脚本&#xff0c;这里我使用的是40839.c脚…

独立乙游井喷成新趋势,真来抢市场还是只画大饼?

国产乙游市场又迎来了新变化。 进入5月份&#xff0c;独立乙女游戏如雨后春笋般冒了出来&#xff0c;两、三个人组成的制作组&#xff0c;没有任何程序协助和资金支持&#xff0c;全靠为爱发电来打造一款乙女游戏&#xff0c;成为了今夏乙游市场的新趋势。 目前已经有独立乙游…

SwiftUI 5.0(iOS 17)进一步定制 TipKit 外观让撸码如虎添翼

概览 在之前 SwiftUI 5.0&#xff08;iOS 17&#xff09;TipKit 让用户更懂你的 App 这篇博文里&#xff0c;我们已经初步介绍过了 TipKit 的基本知识。 现在&#xff0c;让我们来看看如何进一步利用 SwiftUI 对 TipKit 提供的细粒度外观定制技巧&#xff0c;让 Tip 更加“明眸…

蓝桥杯第十四届国赛B组刷题笔记

A-0子2023&#xff1a; 题目&#xff1a; 小蓝在黑板上连续写下从 11 到 20232023 之间所有的整数&#xff0c;得到了一个数字序列&#xff1a; &#x1d446;12345678910111213...20222023S12345678910111213...20222023。 小蓝想知道 &#x1d446;S 中有多少种子序列恰好等…

用Python爬取百度搜索结果并保存

项目目标 爬取百度上关键字为“粮食”的搜索结果&#xff0c;并保存&#xff0c;提交给客户&#xff0c;用于进一步分析我国粮食政策。 项目准备 软件&#xff1a;PyCharm 需要的库&#xff1a;json&#xff0c; requests&#xff0c;etree 项目分析 1&#xff09;如何进行…

人工智能应用层岗位—AI项目经理/AI产品经理

AI是一门技术&#xff0c;最终落实成产品才能具备商业价值 应用层&#xff0c;就是面向特定应用场景&#xff0c;形成人工智能软硬件产品或解决方案。主要包括行业AI解决方案和热门产品&#xff0c;如自动驾驶、机器人、智能家居、可穿戴的智能设备等 相应的&#xff0c;就会…

【算法】排序

排序算法在信息学非常常用。Hello&#xff01;大家好&#xff0c;我是学霸小羊&#xff0c;今天讲几个排序算法。 1.“打擂台”排序 思路&#xff1a;a[ i ]和a[ j ]打擂台&#xff08;i<j&#xff09;。 这个方法简单易懂&#xff0c;只需要看看需不需要交换。按从大到小…

element ui 的el-input输入一个字后失去焦点,需重新点击输入框才能再次输入!

解决方案&#xff1a; 我是form表单嵌套表格&#xff0c;里面的el-input输入框&#xff0c;输入第一个值的时候会突然失去焦点&#xff0c;需要再次点击输入框才能正常输入&#xff0c;原因是table的key值&#xff0c;需要改成正常的index即可&#xff0c;如果你是循环的&…

阿里云物联网平台python ADK 发布/订阅

基础知识学习参考&#xff1a; 1、使用消息通讯Topic 2、python link SDK 一、环境变量配置 1、python3.6&#xff1a;下载安装 2、安装paho-mqtt 1.4.0版本 pip install paho-mqtt1.4.03、安装安装Link SDK最新版本 pip install aliyun-iot-linkkit 4、下载python ADK…

elementui table 回显的时候勾选状态消失 分页切换的时候table的选中状态会被重置

<el-table v-loading"loading2" ref"multipleTable" :data"reportList" sort-change"handleReportSortChange" selection-change"handleReportSelectionChange">回显代码getReportList(){ //table列表的值this.loadin…

python-编写函数判断一个三位数是否为水仙花数。

【问题描述】要求编写函数isflower(n)判断一个三位数n是否为水仙花数,如果是&#xff0c;则返回True&#xff0c;否则返回False。在主程序中要求调用该函数并输出三位数中所有的水仙花数。所谓"水仙花数"是指一个3位数&#xff0c;其各位数字立方和等于该数本身。例如…

VirtualBox安装ubuntu22.04记录

一,VirtualBox 软件安装 虚拟机&#xff08;Virtual Machine&#xff09;指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。 常见的虚拟机软件主要有两款 VMware 和 VirtualBox 。VMwar…

【最新区块链论文录用资讯】CCF A—FSE 2024 共4篇 附pdf

Conference&#xff1a;ACM International Conference on the Foundations of Software Engineering (FSE) CCF level&#xff1a;CCF A Categories&#xff1a;软件工程/系统软件/程序设计语言 Year&#xff1a;2024 Num&#xff1a;4 1 Title: Demystifying Invariant …

项目启动 | 晟泰克再度牵手盘古信息,引入IMS V6系统实现数字化深度推进

当前&#xff0c;中国汽车零部件行业的数字化转型正在快速推进&#xff0c;数字化工业软件已经广泛应用于汽车零部件的研发、生产和服务等各个环节&#xff0c;赋能行业实现降本减存&#xff0c;提质增效&#xff0c;有力推动了行业高质量发展。 成立于2003年的合肥晟泰克汽车…

深度学习之加宽全连接

1.Functional API 搭建神经网络模型 1.1.利用Functional API编写宽深神经网络模型进行手写数字识别 import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.datasets import load_iris from sklearn.model_selection import train_test_spli…