10、k8s對外服務之ingress

service和ingress的作用

service的作用

NodePort:會在每個節點開放一個端口,端口號30000-32767。

也是只能用于內網訪問,四層轉發。實現負載均衡。不能基于域名進行訪問。

clusterip:service的默認類型,只能在集群內部訪問。

loadBalancer:基于云平臺的實現的,需要有loadBalancer的地址,僅限于云平臺。

externallPS:service允許分配外部IP,把外部IP路由集中到集群的一個或者多個node節點。

ingress:只需要一個或者少量的公網IP地址或者loadBalancer的地址,就可以實現將多個http的服務暴露到外網,七層代理,service的service,基于域名和URL路徑,把用戶的請求轉發到一個或者多個service的規則。

數據流向圖

根據ingress-controller匹配到指定service,service再把訪問ingress的基于域名的連接流量轉發到service匹配的pod。

ingress的組成

ingress只能配置yaml文件配置,其實ingress是一種規則,根據ingress的配置匹配到指定service,service再把訪問ingress的基于域名的連接流量轉發到service匹配的pod。

ingress-controller:不是k8s自帶的組件,第三方的軟件,不管是哪一種ingress-controller機制都是一樣的,沒有任何區別,都是以pod的形式運行在集群當中。

  • ingress-nginx:主流的ingress-controller。
  • traefik:有圖形化的ui,直觀。

ingress-controller暴露方式

1、deployment+loabBalancer:你把ingress部署在公有云,可以采用這種方式,loadBalancer會為service自帶創建一個負載均衡器,只要域名解析指向到loadbalancer的地址,就可以實現集群的對外訪問。

2、daemonSet+hostnetwork+nodeSelector:ingress-controller會直接使用宿主機的網絡和端口,一個node節點只能部署一個ingress-controller的pod。適用于大并發的生產環境。

3、deployment+nodeport:deployment部署也會執行一個ingress-controller的pod,pod也會執行一個service,service的模式是nodeport,分別對應80(http)和443(https),對應節點的端口號范圍是30000-32767。

還需要額外部署一個service轉發到pod,這種方式又會多了一層轉發的請求,請求量級大,性能會有一定影響。

轉發方式:NAT

ingress部署實現的過程

daemonSet+hostnetwork+nodeSelector模式

1、先給node2定義標簽

2、提前準備好nginx-ingress-controller腳本文件并運行,保證daemonSet

由下可見hostnetwork直接使用了宿主機node2的端口轉發流量

  • 8181:nginx-controller默認配置的后臺轉發的端口,ingress沒有匹配到規則時,使用的默認端口。

3、接著編寫yaml腳本,定義pvc、pod、service和ingress,使ingress請求轉向service,service再轉向pod,pvc給pod自動分配pv。

4、最后給node2節點做域名映射,運行腳本后顯示成功。

deployment+nodeport模式

1、提前準備好nginx-ingress-controller腳本文件并運行,保證deployment

2、創建service的yaml文件如下

3、直接運行上面實驗(包含pvc、pod、service和ingress)的yaml腳本

4、最后node1或者node2節點做域名映射,運行腳本后顯示成功。

https

https概念

http的加密版就是https,默認端口是443。加密方式:SSL或者TSL協議實現加密和認證。SSL已經淘汰,TLS證書是主流。

TLS的組成:

  • 記錄協議(record protocol):負責數據傳輸的可靠性
  • 握手協議(handshake Security):建立安全連接的過程

TSL的作用:

  1. 數據加密:使用對稱密鑰加密通信的內容。
  2. 認知:通過數字證書驗證服務器(服務端和客戶端都要)的身份。證書可以自定義,也可以在專門的數字證書網站獲取。
  3. 完整性檢查:防止第三方對數據進行篡改。

htttps數據流向:

1、客戶端發起請求,如向百度發起請求(請求方式:https,請求方法:get),請求建立連接:三次握手。

2、TLS/SSL的握手過程:

  1. 客戶端——>發送支持tls版本的加密套件列表(證書和私鑰文件)
  2. 服務端——>服務器選擇一個雙方都支持的TLS的證書和私鑰等等,生產一個數字證書。
  3. 客戶端——>客戶端收到服務端的證書之后,驗證證書的有效性(簽發證書人是否合法,過期時間等等)。
  4. 客戶端生成預定的密鑰(TLS),和服務器交換密鑰;服務端驗證密鑰的有效性,以及密鑰是否正確。
  5. TLS的握手過程完成

3、建立安全連接:使用協商好的加密算法和密鑰對后續的數據進行加密傳輸。

4、關閉TLS連接,釋放資源然后四次揮手斷開連接。

https部署實現的過程

daemonSet+hostnetwork+nodeSelector

1、先在集群內生成證書和密鑰

證書:用于加密和認證網絡通信的數字證書,證明服務器的身份。確保客戶端連接到服務器是合法的。協商加密的密鑰,保證通信過程中數據的安全。

公鑰:有組織信息,數字簽名等等,證書頒發機構簽發的。

私鑰:對服務器的證書進行數字簽名,同時用于解密客戶端發送的加密數據,私鑰只有服務端才能夠訪問。

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"

  • openssl:簽發ssl證書
  • req:執行證書的請求以及生產相關的文件
  • -x509:生成自簽名x.509格式的證書
  • -sha256:使用sha-256的散列算法
  • -nodes:表示生成的私鑰不加密
  • -days 365:證書有效期的時間365天
  • -newkey rsa:2048:表示生成密鑰對是rsa加密的,長度是2048位。
  • -keyout tls.key:生成的密鑰對保存到tls.key文件中
  • -out tls.crt:證書保存到tls.crt文件中
  • -subj "/CN=nginxsvc/O=nginxsvc:為證書添加一個主題,CN是證書的名稱,O是組織關系。

2、將證書和密鑰保存到secret中

3、根據上面http的配置文件修改ingress控制字段添加個加密即可。

4、最后在主節點上給node2節點做域名映射,運行腳本后顯示成功。

deployment+nodeport模式實現https在上面http實操基礎上添加加密字段即可。

容器內抓包

1、獲取docker的container id

2、根據container id獲取docker的進程號

docker inspect --format '{{.State.Pid}}'??container id


?

3、進入這個容器的網絡命令空間

nsenter -n -t pid號

4、抓包

tcpdump -i 容器的網卡名

ingress補充

基于用戶名和密碼實現登錄的認證

這里我們使用上面deployment+nodeport模式實驗的pod,當然也可以重新建一個pod。

apt -y install apache2

設置http的賬號密碼

  • auth是加密的文件的名稱,必須是auth的名稱。

2、創建secret,使用auth加密的文件。

3、配置yaml文件

頁面跳轉,重定向

配置yaml文件

做個地址映射即可實現url頁面跳轉

當我們訪問re.xy104.com會跳轉到www2.xy104.com:32271

traefik

ingress-controller的另一種插件,和nginx-ingress大同小異。

也是部署微服務更快捷的視線的http反向代理和負載均衡,以及7層代理。

nginx-ingress 需要不斷的請求 k8s的api,獲取終端的變化,traefik自動的實時更新,可以完全同步獲取k8s的api的更新結果,和k8s的適配度更高。

nginx-ingree處理大并發環境更優秀

traefik:一般用于小的集群,并發量不是那么大的請求環境,。

traefik的部署方式

deployment+nodeport:適合面向內部服務

daemonset+hostnetwork+nodeselector:適合面向外部服務

loadbalancer+deployme

總結

ingress是外部進入k8s集群的入口,可以理解為service的service,ingress使用的時候,域名,匹配到可用的service。

ingress是做7層轉發,可以對http/https的請求進行處理。

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

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

相關文章

Java數據結構---棧

目錄 一、棧的概念 二、棧的基本方法 三、棧的模擬實現 四、棧的練習 1、括號匹配 2、出棧入棧次序匹配 一、棧的概念 棧是一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧頂,另一端稱為棧底…

從CNN到Transformer:遙感影像目標檢測的未來趨勢

文章目錄 前言專題一、深度卷積網絡知識專題二、PyTorch應用與實踐(遙感圖像場景分類)專題三、卷積神經網絡實踐與遙感影像目標檢測專題四、卷積神經網絡的遙感影像目標檢測任務案例【FasterRCNN】專題五、Transformer與遙感影像目標檢測專題六、Transfo…

php-fpm

摘要 php-fpm(fastcgi process manager)是PHP 的FastCGI管理器,管理PHP的FastCGI進程,提升PHP應用的性能和穩定性 php-fpm是一個高性能的php FastCGI管理器,提供了更好的php進程管理方式,可以有效的控制內存和進程,支…

Python strip() 方法詳解:用途、應用場景及示例解析(中英雙語)

Python strip() 方法詳解:用途、應用場景及示例解析 在 Python 處理字符串時,經常會遇到字符串前后存在多余的空格或特殊字符的問題。strip() 方法就是 Python 提供的一個強大工具,專門用于去除字符串兩端的指定字符。本文將詳細介紹 strip(…

open webui 部署 以及解決,首屏加載緩慢,nginx反向代理訪問404,WebSocket后端服務器鏈接失敗等問題

項目地址:GitHub - open-webui/open-webui: User-friendly AI Interface (Supports Ollama, OpenAI API, ...) 選擇了docker部署 如果 Ollama 在您的計算機上,請使用以下命令 docker run -d -p 3000:8080 --add-hosthost.docker.internal:host-gatewa…

docker安裝ros2 并在windows中顯示docker內ubuntu系統窗口并且vscode編程

這里包括docker desktop安裝ros2 humble hawkshill , 安裝xserver(用來在windows中顯示ubuntu中窗口), vscode安裝插件連接docker并配置python的一系列方法 1.安裝xserver 為了能方便的在windows中顯示ubuntu內的窗口,比如rqt窗口 參考文章:https://www.cnblogs.com/larva-zhh…

VMware安裝Centos 9虛擬機+設置共享文件夾+遠程登錄

一、安裝背景 工作需要安裝一臺CentOS-Stream-9的機器環境,所以一開始的安裝準備工作有: vmware版本:VMware Workstation 16 鏡像版本:CentOS-Stream-9-latest-x86_64-dvd1.iso (kernel-5.14.0) …

C/C++ 中 volatile 關鍵字詳解

volatile 關鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改,比如:操作系統、硬件或者其它線程等。遇到這個關鍵字聲明的變量,編譯器對訪問該變量的代碼就不再進行優化,從而可以提供對特殊…

處理器架構、單片機、芯片、光刻機之間的關系

這些術語都涉及到半導體和電子設備的設計與制造,但它們的含義和作用有所不同。下面我會逐個解釋,并描述它們之間的關系: 1. 處理器架構 (Processor Architecture) 處理器架構指的是處理器(CPU)的設計原理和結構。它定…

python之socket編程

Socket編程是計算機網絡編程的基礎,它允許兩臺計算機(或同一個計算機的不同進程)之間進行通信。Python 提供了 socket 模塊,可以很方便地進行 Socket 編程。下面是一些基本的 Socket 編程示例,包括 TCP 和 UDP。 TCP …

Docker 的安全配置與優化(二)

Docker 安全優化策略 (一)多階段構建優化鏡像大小 多階段構建是 Docker 17.05 版本引入的強大功能,它允許在一個 Dockerfile 中定義多個構建階段,每個階段都可以使用不同的基礎鏡像和依賴項,最終只將必要的文件和依賴…

歐洲跨境組網專線:企業出海的高效網絡解決方案

在全球化的背景下,越來越多的企業將業務拓展至海外市場,并在歐洲等地設立分支機構。然而,跨境辦公中常常面臨公網網絡延遲高、打開速度慢、丟包嚴重等問題,這不僅影響辦公效率,還增加了IT維護的難度和成本。針對這一痛…

面陣工業相機提高餐飲業生產效率

餐飲行業是一個快節奏、高要求的領域,該領域對生產過程中每一個階段的效率和準確性都有很高的要求。在食品加工、包裝、質量控制和庫存管理等不同生產階段實現生產效率的優化是取得成功的關鍵步驟。面陣工業相機能夠一次性捕捉對象的二維區域圖像,并支持…

Renesas RH850 IAR編譯時變量分配特定內存

文章目錄 1. 核心作用2. 典型使用場景3. 示例代碼4. 編譯器與鏈接腳本協作5. 注意事項6. 調試驗證在RH850系列微控制器的開發中,#pragma location = "FIRST_RAM" 是一條編譯器指令,其核心含義是 將變量或函數分配到名為 FIRST_RAM 的特定內存段。以下是詳細解釋: …

C++面試題,進程和線程方面(1)

文章目錄 前言進程和線程有什么不同進程,線程的通訊方式什么是鎖為什么說鎖可以使線程安全加鎖有什么副作用總結 前言 這是個人總結進程和線程方面的面試題。如果有錯,歡迎佬們前來指導!!! 進程和線程有什么不同 進程…

視頻mp4垂直拼接 水平拼接

視頻mp4垂直拼接 水平拼接 pinjie_v.py import imageio import numpy as np import os import cv2def pinjie_v(dir1,dir2,out_dir):os.makedirs(out_dir, exist_okTrue)# 獲取目錄下的所有視頻文件video_files_1 [f for f in os.listdir(dir1) if f.endswith(.mp4)]video_fi…

Unity攝像機與燈光相關知識

一、Inspector窗口 Inspector窗口可以查看和編輯對象的屬性以及設置 其中包含各種組件,例如用Cube對象來舉例 1.Sphere(Mesh)組件: 用來決定對象的網格屬性,例如球體網格為Sphere、立方體網格為Cube 2.Mesh Renderer組件: 用來設置…

C++(17):為optional類型構造對象

C++(17):optional,多了一個合理的選擇_c++17 max-CSDN博客 介紹了optional做為函數返回值的一種方式 其實optional也可以作為對象來使用 #include &

探索關鍵領域的AI工具:機器學習、深度學習、計算機視覺與自然語言處理

引言 在人工智能(AI)迅猛發展的今天,機器學習(ML)、深度學習(DL)、計算機視覺(CV)和自然語言處理(NLP)已經成為解決復雜問題的關鍵技術。無論是自動駕駛車輛的視覺識別,還是智能助手的對話理解,這些技術都在改變著世界。本文將介紹在各個領域…

基于vue和微信小程序的校園自助打印系統(springboot論文源碼調試講解)

第3章 系統設計 3.1系統功能結構設計 本系統的結構分為管理員和用戶、店長。本系統的功能結構圖如下圖3.1所示: 圖3.1系統功能結構圖 3.2數據庫設計 本系統為小程序類的預約平臺,所以對信息的安全和穩定要求非常高。為了解決本問題,采用前端…