ingress介紹和ingress通過LoadBalancer暴露服務配置

目錄

一.ingress基本原理介紹

1.將原有用于暴露服務和負載均衡的服務的三四層負載均衡變為一個七層負載均衡

2.controller和ingress

3.通過下面這個圖可能會有更直觀的理解

二.為什么會出現ingress

1.NodePort存在缺點

2.LoadBalancer存在缺點

三.ingress三種暴露服務的方式

四.ingress配置前準備工作

1.像之前的openelb部署文章講到一樣,先開啟嚴格ARP

2.部署好openelb相關配置

五.部署ingress,部署deploy.yaml

1.文件網盤地址

2.上面鏈接中的應修改處已修改好,主要如下

3.部署deploy.yaml

4.創建需要用的deployment和service

六.創建該服務的ingress-http代理

1.主要配置項有host、service-name、service-port等幾處,代碼中介紹

2.添加域名映射進行訪問測試

(1)linux

(2)windows


一.ingress基本原理介紹

1.將原有用于暴露服務和負載均衡的服務的三四層負載均衡變為一個七層負載均衡

工作原理了類似于nginx,等于是在ingress里建立許多規則,在通過controller監聽規則變化,生成對應的配置,實現對服務的反向代理配置,為外部提供服務,并動態更新。

2.controller和ingress

(1)上面提到controller,他是具體用于實現反向代理和負載均衡的程序,對ingress定義的規則進行解析并根據配置進行轉發,nginx、haproxy等都可以作為實現方式。如果是對Kubernetes 集群外部的客戶端提供服務,那么 Controller 實現的是類似于邊緣路由(Edge Router) 的功能。需要注意的是, Ingress 只能以 HTTP TTPS 提供服務。

(2)那么還要提到一個ingress對象,他起到定義請求如何轉發到service的規則的作用,使用 Ingress 進行服務路由時, Controller 基于 Ingress 規則將客戶端請求直接轉發到 Service 對應的后端 Endpoint Pod 上,這樣會跳過 kube-proxy 設置的路由轉發規則,以提高網絡轉發效率。

3.通過下面這個圖可能會有更直觀的理解

?15130b53c352448f9fe73efddefc1c96.png

二.為什么會出現ingress

我們知道ingress也是用于暴露服務和負載均衡的,相對NodePort和LoadBalancer的缺點而言,ingress可以較完美解決這些問題,耗費較少的端口和LB資源,比較方便,一個IP可以暴露多個應用,支持同域名不同uri,支持證書等功能。但是如上所述,他是一個七層負載均衡,在某種情況下他還是會造成CPU消耗大,設備性能下降。

1.NodePort存在缺點

集群中服務增多時,他的占用設備的端口比較多,但站在內核處理方面,他的內核處理次數少一點。

2.LoadBalancer存在缺點

每一個service都要配置一個LB,還需要云廠商的配置支持,在特殊情況下比較麻煩。

三.ingress三種暴露服務的方式

三種方式分別是:deployment+loadbalancer的service,daemonset+hostnetwork+nodeselector的service,deployment+nodeport的service,這里主要介紹deployment+loadbalancer下的openelb方式部署,用Deployment部署ingress-controller,創建一個type為 LoadBalancer的 service關聯這組pod。公有云為LoadBalancer的 service自動創建一個負載均衡器,這時把域名解析指向地址,就實現了集群服務的對外暴露。

四.ingress配置前準備工作

openelb,purelb,metallb三種均衡器在部署ingress之前都需要保證部署的該功能負載均衡正常工作,這里就以openelb為例

1.像之前的openelb部署文章講到一樣,先開啟嚴格ARP

[root@k8s-master ingress]# kubectl edit configmap kube-proxy -n kube-system
[root@k8s-master ingress]# kubectl rollout restart ds kube-proxy -n kube-system 
daemonset.apps/kube-proxy restarted
[root@k8s-master ingress]# kubectl get configmap kube-proxy -n kube-system -o yaml | grep modemode: "ipvs"
[root@k8s-master ingress]# kubectl get configmap kube-proxy -n kube-system -o yaml | grep strictARPstrictARP: true

2.部署好openelb相關配置

openelb文件網盤鏈接:百度網盤 請輸入提取碼 提取碼:29e4

 #部署完查看是否有openelb-system名稱空間,是否有pod運行,以及其他資源是湊正常運行
[root@k8s-master ingress]# kubectl apply -f openelb.yaml
[root@k8s-master ingress]# kubectl get all -n openelb-system ?
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  READY ? STATUS ? ?  RESTARTS ? AGE
pod/openelb-admission-create-5ffkm ?  0/1 ? ? Completed ? 0 ? ? ? ?  17m
pod/openelb-admission-patch-hdt6j ? ? 0/1 ? ? Completed ? 1 ? ? ? ?  17m
pod/openelb-keepalive-vip-bl7h7 ? ? ? 1/1 ? ? Running ? ? 0 ? ? ? ?  17m
pod/openelb-keepalive-vip-ng2c7 ? ? ? 1/1 ? ? Running ? ? 0 ? ? ? ?  17m
pod/openelb-manager-99b49789c-g72wf ? 1/1 ? ? Running ? ? 0 ? ? ? ?  17m
?
NAME ? ? ? ? ? ? ? ? ? ? ?  TYPE ? ? ?  CLUSTER-IP ? ? EXTERNAL-IP ? PORT(S) ? AGE
service/openelb-admission ? ClusterIP ? 10.99.101.18 ? <none> ? ? ?  443/TCP ? 17m
?
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DESIRED ? CURRENT ? READY ? UP-TO-DATE ? AVAILABLE ? NODE SELECTOR ? AGE
daemonset.apps/openelb-keepalive-vip ? 2 ? ? ? ? 2 ? ? ? ? 2 ? ? ? 2 ? ? ? ? ?  2 ? ? ? ? ? <none> ? ? ? ?  17m
?
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ?  READY ? UP-TO-DATE ? AVAILABLE ? AGE
deployment.apps/openelb-manager ? 1/1 ? ? 1 ? ? ? ? ?  1 ? ? ? ? ? 17m
?
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  DESIRED ? CURRENT ? READY ? AGE
replicaset.apps/openelb-manager-99b49789c ? 1 ? ? ? ? 1 ? ? ? ? 1 ? ? ? 17m
?
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? COMPLETIONS ? DURATION ? AGE
job.batch/openelb-admission-create ? 1/1 ? ? ? ? ? 3s ? ? ? ? 17m
job.batch/openelb-admission-patch ?  1/1 ? ? ? ? ? 4s ? ? ? ? 17m
?
#創建eip地址池
[root@k8s-master ingress]# cat  ip-pool.yaml ? ?
apiVersion: network.kubesphere.io/v1alpha2
kind: Eip
metadata:name: my-eip-pool
spec:address: 192.168.2.11-192.168.2.20protocol: layer2disable: falseinterface: ens33
[root@k8s-master ingress]# kubectl apply -f ip-pool.yaml

五.部署ingress,部署deploy.yaml

1.文件網盤地址

鏈接:https://pan.baidu.com/s/15xTy25X9_3HP-qjhmoM9Iw?
提取碼:54zw

2.上面鏈接中的應修改處已修改好,主要如下

controller和controller-admission都添加了一段注解annotations,用于聲明使用剛才創建的eip地址池,添加了80端口

0a9d4bfcadf2411681b3c59cdbe5529b.png

c86209b3c69740b1895f9bd0e5597727.png

3.部署deploy.yaml

[root@k8s-master ingress]# kubectl apply -f deploy.yaml

4.創建需要用的deployment和service

創建關于nginx和tomcat的兩個service和deployment,代碼中有注意事項

[root@k8s-master ingress]# cat mydeployment.yaml 
apiVersion: apps/v1
kind: Deployment ? ? #deployment都是正常創建即可
metadata:labels:app: my-nginxname: my-nginxnamespace: myns
spec:replicas: 1selector:matchLabels:app: my-nginxtemplate:metadata:labels:app: my-nginxspec:containers:- image: nginx:1.17.2name: nginximagePullPolicy: IfNotPresentports:- containerPort: 80
?
---
?
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: my-tomcatname: my-tomcatnamespace: myns
spec:replicas: 1selector:matchLabels:app: my-tomcattemplate:metadata:labels:app: my-tomcatspec:containers:- image: tomcat:8.5-jre10-slimname: tomcatimagePullPolicy: IfNotPresentports:- containerPort: 8080
?
---
?
apiVersion: v1
kind: Service
metadata:name: nginx-servicenamespace: mynsannotations: ? ?#在metadata中指定注解信息,使用eip地址池中的地址lb.kubesphere.io/v1alpha1: openelbprotocol.openelb.kubesphere.io/v1alpha1: layer2eip.openelb.kubesphere.io/v1alpha2: my-eip-pool
spec:allocateLoadBalancerNodePorts: false ? #不自動分配端口,由用戶指定externalTrafficPolicy: Cluster ? #將外部流量分發到集群內的所有節點internalTrafficPolicy: Cluster ? #將內部流量限制在集群內selector:app: my-nginxtype: LoadBalancer ? #指定類型為loadbalancer負載均衡ports:- port: 80targetPort: 80
?
---
?
apiVersion: v1
kind: Service
metadata:name: tomcat-servicenamespace: mynsannotations: ? ?#在metadata中指定注解信息,使用eip地址池中的地址lb.kubesphere.io/v1alpha1: openelbprotocol.openelb.kubesphere.io/v1alpha1: layer2eip.openelb.kubesphere.io/v1alpha2: my-eip-pool
spec:allocateLoadBalancerNodePorts: falseexternalTrafficPolicy: ClusterinternalTrafficPolicy: Clusterselector:app: my-tomcattype: LoadBalancerports:- port: 8080targetPort: 8080
[root@k8s-master ingress]# kubectl apply -f mydeployment.yaml

六.創建該服務的ingress-http代理

1.主要配置項有host、service-name、service-port等幾處,代碼中介紹

[root@k8s-master ingress]# cat myingress.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: myingressnamespace: myns
spec:ingressClassName: nginxrules:- host: www.mynginx.com ? #想要映射的域名http:paths:- path: /pathType: Prefixbackend:service: name: nginx-service ?  #為哪個服務進行映射,必須要和剛才創建的服務名稱一致port:number: 80 ? #暴露哪個端口號用于外部訪問- host: www.tomcat.comhttp:paths:- path: /pathType: Prefixbackend:service:name: tomcat-serviceport:number: 8080

2.添加域名映射進行訪問測試

[root@k8s-master ingress]# kubectl get service -n myns ? #使用的是我們創建的服務所開放出來的EXTERNAL-IP
NAME ? ? ? ? ? ? TYPE ? ? ? ? ? CLUSTER-IP ? ?  EXTERNAL-IP ?  PORT(S) ? ? ? ?  AGE
nginx-service ?  LoadBalancer ? 10.96.45.145 ?  192.168.2.13 ? 80:30385/TCP ? ? 36m
tomcat-service ? LoadBalancer ? 10.97.204.115 ? 192.168.2.14 ? 8080:30165/TCP ? 36m
[root@k8s-master ingress]# kubectl get ingress -n myns ? #分別對應兩個ingress
NAME ? ? ?  CLASS ? HOSTS ? ? ? ? ? ? ? ? ? ? ? ? ?  ADDRESS ? ? ?  PORTS ? AGE
myingress ? nginx ? www.mynginx.com,www.tomcat.com ? 192.168.2.11 ? 80 ? ?  33m

(1)linux

[root@k8s-master ingress]# tail -2 /etc/hosts
192.168.2.13 www.mynginx.com
192.168.2.14 www.mytomcat.com

(2)windows

以管理員身份運行powershell,切到.\drivers\etc\編輯hosts文件,

PS C:\WINDOWS\system32> cd .\drivers\etc\
PS C:\WINDOWS\system32\drivers\etc> notepad .\hosts
PS C:\WINDOWS\system32\drivers\etc>

0af19495fd3a48b588012e366b9c5b4f.png

01eeb54ac5b8417eb3aed3ed7ad5e084.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212820.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212820.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212820.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

7-6 通訊錄排序

輸入n個朋友的信息&#xff0c;包括姓名、生日、電話號碼&#xff0c;本題要求編寫程序&#xff0c;按照年齡從大到小的順序依次輸出通訊錄。題目保證所有人的生日均不相同。 輸入格式: 輸入第一行給出正整數n&#xff08;<10&#xff09;。隨后n行&#xff0c;每行按照“…

基于JavaWeb+SSM+Vue微信小程序的科創微應用平臺系統的設計和實現

基于JavaWebSSMVue微信小程序的科創微應用平臺系統的設計和實現 源碼獲取入口Lun文目錄前言主要技術系統設計功能截圖訂閱經典源碼專欄Java項目精品實戰案例《500套》 源碼獲取 源碼獲取入口 Lun文目錄 1系統概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系統設計思想 1 2相關技術…

Linux Component概述和高通component的使用

1 Linux為什么要引入Component框架&#xff1f; 為了讓subsystem按照一定順序初始化設備才提出來的。 subsystem中由很多設備模塊&#xff0c;內核加載這些模塊的時間不確定。子系統內有些模塊是需要依賴其它模塊先初始化才能進行自己初始化工作(例如v4l2 subdev和v4l2 video …

kubebuilder開發operator

安裝kubebuilder前 需要有kubernetes環境和golang環境 官網&#xff1a;https://go.kubebuilder.io/ 安裝kubebuilder #下載 wget https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH) #改名kubebuilder后加權限 chmod x kubebuilder #放到環境變量里 mv k…

【C語言程序設計】編寫簡單的C程序

目錄 前言 一、程序設計 二、程序改錯 三、程序完善 總結 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高興與大家相識&#xff0c;希望我的博客能對你有所幫助。 &#x1f4a1;本文由Filotimo__??原創&#xff0c;首發于CSDN&#x1f4da;。 &#x1f4e3;如…

unity 2d 入門 飛翔小鳥 死亡 顯示GameOver(十四)

1、添加Img create->ui->img 把圖片拖進去 2、和分數一樣、調整位置 3、修改角色腳本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Fly : MonoBehaviour {//獲取小鳥&#xff08;剛體&#xff09;private Rigidbod…

【Apipost】批量刪除我的51CTO文章

文章目錄 一、序二、API分析三、Apipost測試四、腳本五、Apipost中完成 一、序 去年開始再51CTO同步更新文章&#xff0c;一年多過去了&#xff0c;只漲了3個粉絲。看了下這個平臺就是賣課、搞培訓的&#xff0c;退出了。決定把文章也刪除了&#xff08;有人私信我說專門注冊了…

ToolkenGPT:用大量工具增強LLM

深度學習自然語言處理 原創作者&#xff1a;cola 用外部工具增強大型語言模型(LLM)已經成為解決復雜問題的一種方法。然而&#xff0c;用樣例數據對LLM進行微調的傳統方法&#xff0c;可能既昂貴又局限于一組預定義的工具。最近的上下文學習范式緩解了這一問題&#xff0c;但有…

Shell 常用命令詳解-上

Shell 常用命令詳解-上 1.目錄查閱相關命令2.文件操作相關命令 1.目錄查閱相關命令 ll 命令 命令描述&#xff1a;ll命令用于顯示指定工作目錄下的內容。 命令格式&#xff1a;ll [參數] [目錄名]。 參數說明&#xff1a; 參數說明-a顯示所有文件及目錄&#xff08;包括隱藏文…

【機器學習】041_模型開發迭代過程

一、模型開發的一般步驟 1. 明確研究問題 確定問題的組成和結果&#xff0c;明晰問題是分類問題還是回歸問題 2. 決定系統總體架構 ①理解數據&#xff1a;采集&#xff08;爬取&#xff09;數據&#xff0c;生成&#xff08;導入&#xff09;數據&#xff0c;進行數據清洗…

代碼隨想錄二刷 |二叉樹 |101. 對稱二叉樹

代碼隨想錄二刷 &#xff5c;二叉樹 &#xff5c;101. 對稱二叉樹 題目描述解題思路 & 代碼實現遞歸法迭代法使用隊列使用棧 題目描述 101.對稱二叉樹 給你一個二叉樹的根節點 root &#xff0c; 檢查它是否軸對稱。 示例 1&#xff1a; 輸入&#xff1a;root [1,2,2,…

zcms企業官網建站系統源碼搭建-支持頁面自定義

1.支持mysql&#xff0c;sqlite&#xff0c;access三種數據庫。 2.模板和標簽與asp版的zzzcms通用。 3.asp版的zzzcms的access數據庫可直接使用。 4.支持手機站。 &#xff08;增刪改查不做描述&#xff09;&#xff1a; 網站信息 名稱&#xff0c;logo&#xff0c;微信&…

基于OpenCV的流水線包裝箱檢測計數應用(附源碼)

導 讀 本文主要介紹基于OpenCV的流水線包裝箱檢測計數應用,并給出源碼。 資源下載 完整代碼和視頻下載地址: https://github.com/freedomwebtech/rpi4-conveyor-belt-boxces-counter 核心代碼如下(cboxtest.py): import cv2import numpy as npfrom tracker import*cap=c…

【MYSQL】單表查詢

查詢語法&#xff1a; select 字段&#xff08;*表示全字段&#xff09; from 數據表 【where 條件表達式】 【group by 分組字段【having 分組條件表達式】】 【order by 排序字段【asc | desc】】 例子&#xff1a; 教職工表Teacher(Tno, TName, age, sal, mgr, DNo)&#…

C# 圖解教程 第5版 —— 第17章 轉換

文章目錄 17.1 什么是轉換17.2 隱式轉換17.3 顯示轉換和強制轉換17.4 轉換的類型17.5 數字的轉換17.5.1 隱式數字轉換17.5.2 溢出檢測上下文17.5.3 顯示數字轉換 17.6 引用轉換17.6.1 隱式引用轉換17.6.2 顯式引用轉換17.6.3 有效顯式引用轉換 17.7 裝箱轉換17.7.1 裝箱是創建副…

前端發起更改數據請求后再獲取后端數據發現數據并未更改的一個解決辦法

前端發起更改數據請求后再獲取后端數據發現數據并未更改的一個解決辦法 問題再現 async function refuseRefund(id,type){if(confirm(確定拒絕&#xff1f;)){await fetch(http://127.0.0.1:3000/api/refuseRefund, {method: POST,headers: {Content-type: application/json}…

vue項目搭建---1.搭建基礎的框架

目錄 1. pnpm下載1.1 安裝1.2 差異1.3 鏡像源設置 2. 項目2.1 vite創建項目2.2 項目配置2.3 piniavue-routermain.jsstore/index.jsrouter/index.jsvue文件里使用示例 2.4 eslint prettier.eslintrc.js.eslintignore.prettierrc 2.5 樣式2.6 commitizenpackage.json.cz-config…

MySQL - 聚簇索引和非聚簇索引,回表查詢,索引覆蓋,索引下推,最左匹配原則

聚簇索引和非聚簇索引 聚簇索引和非聚簇索引是 InnoDB 里面的叫法 一張表它一定有聚簇索引&#xff0c;一張表只有一個聚簇索引在物理上也是連續存儲的 它產生的過程如下&#xff1a; 表中有無有主鍵索引&#xff0c;如果有&#xff0c;則使用主鍵索引作為聚簇索引&#xff1b;…

【Scala】Scala中的一些基本數據類型的特性 列表、元組、構造器、單例對象、伴生類、伴生對象、抽象類與特質

列表 使用List(“”,“”,“”)去聲明 sliding 和 groued表示迭代器 val iter List("Hadoop", "Spark", "Scala") sliding 2// sliding 和 groued 是有區別的while (iter.hasNext){println(iter.next())}for (elem <- iter){println(elem)}…

極速學習SSM之SpringMVC筆記

文章目錄 一、SpringMVC簡介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特點 二、HelloWorld1、開發環境2、創建maven工程a>添加web模塊b>打包方式&#xff1a;warc>引入依賴 3、配置web.xmla>默認配置方式b>擴展配置方式 4、創建請求控制器5、創建springMVC…