從外部訪問K8s中Pod的五種方式

hostNetwork、
hostPort、
NodePort、
LoadBalancer、
Ingress

暴露Pod與Service一樣,因為Pod就是Service的backend

1、hostNetwork:true

這是一種直接定義 Pod 網絡的方式。
如果在 Pod 中使用?hostNetwork:true?配置, pod 中運行的應用程序可以直接看到 pod 啟動的主機的網絡接口。
在主機的所有網絡接口上都可以訪問到該應用程序。
注:每次pod的IP是會變化的

使用主機網絡的 pod 的示例定義:

apiVersion: v1
kind: Pod
metadata:name: influxdb
spec:hostNetwork: truecontainers:- name: influxdbimage: influxdb

部署該 Pod:

$ kubectl create -f influxdb-hostnetwork.yml

訪問該 pod 所在主機的 8086 端口:

curl -v http://$POD_IP:8086/ping

將看到?204 No Content?的 204 返回碼,說明可以正常訪問。

注意:
1.?
每次啟動這個 Pod 的時候都可能被調度到不同的節點上,所有外部訪問 Pod 的 IP 也是變化的,而且調度 Pod 的時候還需要考慮是否與宿主機上的端口沖突,因此一般情況下除非您知道需要某個特定應用占用特定宿主機上的特定端口時才使用 hostNetwork: true 的方式。
2. 這種 Pod 的網絡模式有一個用處就是可以將網絡插件包裝在 Pod 中然后部署在每個宿主機上,這樣該 Pod 就可以控制該宿主機上的所有網絡。

2、hostPort:

這是一種直接定義 Pod 網絡的方式。
hostPort?直接將容器的端口與所調度的節點上的端口路由綁定,這樣用戶就可以通過宿主機的 IP 加上來訪問 Pod 了。

如:

apiVersion: v1
kind: Pod
metadata:name: influxdb
spec:containers:- name: influxdbimage: influxdbports:- containerPort: 8086hostPort: 8086

注:這樣做有個缺點,因為 Pod 重新調度的時候該 Pod 被調度到的宿主機可能會變動,這樣就變化了,用戶必須自己維護一個 Pod 與所在宿主機的對應關系。
這種網絡方式可以用來做 nginx Ingress controller 。外部流量都需要通過 kubenretes node 節點的 80 和 443 端口。

3、NodePort:

1. 是K8s里一個廣泛應用的服務暴露方式。
2. K8s中的service默認情況都是使用Cluster IP這種類型,會產生一個只能在內部訪問的Cluster IP,3.如果想能夠直接訪問service,需要將service type修改為nodePort。
4.同時給service指定一個nodeport值(30000-32767),用` --service-node-port-range`定義。
集群外就可以使用K8s任意一個節點的IP加上30000端口訪問該服務了,kube-proxy會自動將流量以輪詢的方式轉發給該service的每一個pod。

apiVersion: v1
kind: Pod
metadata:name: influxdblabels:name: influxdb
spec:containers:- name: influxdbimage: influxdbports:- containerPort: 8086

同時還可以給 service 指定一個?nodePort?值,范圍是 30000-32767,這個值在 API server 的配置文件中,用?--service-node-port-range?定義。

kind: Service
apiVersion: v1
metadata:name: influxdb
spec:type: NodePortports:- port: 8086nodePort: 30000selector:name: influxdb

1. 集群外就可以使用 kubernetes 任意一個節點的 IP 加上 30000 端口訪問該服務了。kube-proxy 會自動將流量以 round-robin 的方式轉發給該 service 的每一個 pod。
2. 這種服務暴露方式,無法讓你指定自己想要的應用常用端口,不過可以在集群上再部署一個反向代理作為流量入口。

4、LoadBalancer:

LoadBalancer?只能在?service?上定義。這是公有云提供的負載均衡器,如 AWS、Azure、CloudStack、GCE 等。

kind: Service
apiVersion: v1
metadata:name: influxdb
spec:type: LoadBalancerports:- port: 8086selector:name: influxdb

查看服務:

kubectl get svc influxdb

內部可以使用ClusterIP:Port來訪問服務

外部可以使用兩種方式:

    1. 任意節點的IP加30051端口訪問服務?10.97.121.42:30051
    2. 使用EXTERNAL-IP來訪問,這是云供應商提供的負載均衡IP 10.13.242.236:8086

5、Ingress:

Ingress?是自?kubernetes1.1?版本后引入的資源類型。必須要部署?Ingress controller?才能創建 Ingress 資源,Ingress controller 是以一種插件的形式提供。

  1. Ingress controller 部署在 Kubernetes 之上的 Docker 容器。
  2. 它的 Docker 鏡像包含一個像 nginx 或 HAProxy 的負載均衡器和一個控制器守護進程。
  3. 控制器守護程序從 Kubernetes 接收所需的 Ingress 配置。
  4. 它會生成一個 nginx 或 HAProxy 配置文件,并重新啟動負載平衡器進程以使更改生效。換句話說,Ingress controller 是由 Kubernetes 管理的負載均衡器。

Kubernetes Ingress 提供了負載平衡器的典型特性:HTTP 路由,粘性會話,SSL 終止,SSL 直通,TCP 和 UDP 負載平衡等。目前并不是所有的 Ingress controller 都實現了這些功能,需要查看具體的 Ingress controller 文檔。

ingress controller是由K8s管理的負載均衡容器,它的鏡像包含一個nginx或HAProxy負載均衡器和一個控制器守護進程。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: influxdb
spec:rules:- host: influxdb.kube.example.comhttp:paths:- backend:serviceName: influxdbservicePort: 8086

外部訪問URL?http://influxdb.kube.example.com/ping?訪問該服務,入口是80端口,然后Ingress controller直接將流量轉發給后端Pod,不需再經過kube-proxy的轉發,比LoadBalance方式更高效。

?

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

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

相關文章

C++頭文件

C頭文件 一般頭文件特殊頭文件windows.hbits/stdc.h 一般頭文件 C頭文件是一種包含預定義函數、類和變量聲明的文件。它們通常用于在源代碼文件中引入外部庫或模塊的功能。 頭文件的作用是提供程序所需的聲明信息,以便在源代碼文件中使用這些聲明。當你在源代碼文…

前端面試題-CSS

1. 盒模型 ??渲染時, dom 元素所采?的 布局模型。可通過 box-sizing 進?設置。根據計算寬?的區域可分為 content-box ( W3C 標準盒模型)border-box ( IE 盒模型)padding-boxmargin-box (瀏覽器未實現) 2. BFC 塊級格式化上下?,是?個獨?的渲染…

題解:ABC277E - Crystal Switches

題解:ABC277E - Crystal Switches 題目 鏈接:Atcoder。 鏈接:洛谷。 難度 算法難度:B。 思維難度:A。 調碼難度:C。 綜合評價:普及/提高。 算法 寬度優先搜索拆點思路 思路 把每個點…

Android WakefulBroadcastReceiver的使用

WakefulBroadcastReceiver 是一種特殊類型的廣播接收器,為應用創建和管理 PARTIAL_WAKE_LOCK 。 簡單來說, WakefulBroadcastReceiver 是持有系統喚醒鎖的 BroadcastReceiver ,用于執行需要保持CPU運轉的場景。 注冊 注冊 Receiver &#…

將vue項目通過electron打包成windows可執行程序

將vue項目打包成windows可執行程序 1、準備好dist將整個項目打包 npm run build2、安裝electron依賴 npm install electron --save-dev npm install electron-packager --save-dev"electron": "^13.1.4", "electron-packager": "^15.2.0…

九耶丨閣瑞鈦倫特-在項目中找到的經典BUG是什么?

在項目中找到的經典BUG有很多種,以下是其中一些常見的例子: 空指針異常(NullPointerException):當程序試圖訪問一個空對象或未初始化的變量時,會拋出空指針異常。這通常是由于缺少對變量的正確初始化或檢查…

Neo4j之FOREACH基礎

在 Neo4j 中,FOREACH 語句用于在查詢中對一組元素執行某些操作,通常是在創建或更新節點關系時。它常常與 CREATE 或 SET 等操作結合使用。 創建多個關系: MATCH (p:Person), (m:Movie) WHERE p.name Alice AND m.title The Matrix FOREAC…

MySQL常用練手題目

數據庫表名和字段設計 1.學生表 Student(s_id,s_name,s_birth,s_sex) 學生編號,學生姓名, 出生年月,學生性別 2.課程表 Course(c_id,c_name,t_id) 課程編號, 課程名稱, 教師編號 3.教師表 Teacher(t_id,t_name) 教師編號,教師姓名 4.成績表 Score (s_id,c_id,s_score) 學生編號…

C# window forms 進度條實現

在 C# Windows Forms 應用程序中,如果在后臺執行長時間運行的任務,并希望同時更新進度條,可以使用多線程來實現。這將確保進度條的更新不會阻塞主線程,從而保持界面的響應性。以下是一個示例,演示了如何在后臺執行任務…

【Datawhale 科大訊飛-基于論文摘要的文本分類與關鍵詞抽取挑戰賽】機器學習方法baseline

內容 科大訊飛AI開發者大賽NLP賽道題目: 基于論文摘要的文本分類與關鍵詞抽取挑戰賽 任務: 1.機器通過對論文摘要等信息的理解,判斷該論文是否屬于醫學領域的文獻。 2.提取出該論文關鍵詞。 數據集的獲取 訓練集: 這里讀取tit…

【基礎】Android Handler

一、博客參考 Handler機制詳解【重點】:https://www.jianshu.com/p/b4d745c7ff7a Handler Thread工作線程操作UI范例【重點】:https://www.cnblogs.com/net168/p/4075126.html 二、內存泄漏的解決:靜態內部類弱引用 關于 Handler&#xf…

vue+flask基于知識圖譜的抑郁癥問答系統

vueflask基于知識圖譜的抑郁癥問答系統 抑郁癥已經成為當今社會刻不容緩需要解決的問題,抑郁癥的危害主要有以下幾種:1.可導致病人情緒低落:抑郁癥的病人長期處于悲觀的狀態中,感覺不到快樂,總是高興不起來。2.可導致工…

智慧工地平臺工地人員管理系統 可視化大數據智能云平臺源碼

智慧工地概述: 智慧工地管理平臺是以物聯網、移動互聯網技術為基礎,充分應用大數據、人工智能、移動通訊、云計算等信息技術,利用前端信息采通過人機交互、感知、決策、執行和反饋等,實現對工程項目內人員、車輛、安全、設備、材…

elaticsearch(3)

整合springboot 1.整合依賴 注意依賴版本和安裝的版本一致 <properties> <java.version>1.8</java.version> <!-- 統一版本 --> <elasticsearch.version>7.6.1</elasticsearch.version> </properties> 導入elastics…

數據結構算法--1 順序查找二分查找

順序查找時間復雜度為O(n) 我們可以借助Python中的函數enumerate,通過enumerate遍歷列表返回其索引和值 def linnear_search(li, val):for ind, v in enumerate(li):if v val:return indelse:return None 也可以通過列表長度依次遍歷: def linear_search(li, val): # …

瀏覽器渲染原理 - 輸入url 回車后發生了什么

目錄 渲染時間點渲染流水線1&#xff0c;解析&#xff08;parse&#xff09;HTML1.1&#xff0c;DOM樹1.2&#xff0c;CSSOM樹1.3&#xff0c;解析時遇到 css 是怎么做的1.4&#xff0c;解析時遇到 js 是怎么做的 2&#xff0c;樣式計算 Recalculate style3&#xff0c;布局 la…

創建react native項目的筆記

創建react native項目的筆記 重新下載 ruby安裝 watchman安裝 cocoapods安裝 react native 項目創建好項目后安裝 ios 依賴清除設備緩存安裝 android 依賴鏈接 網易 mumu 模擬器安裝路由 Navigation頁面之間的跳轉邏輯自定義頭部樣式判斷不同設備平臺代碼示例安裝 Axios安裝本地…

java mysql druid mybatis-plus里使用多表刪除出錯的一種處理方式

今天在出來多表刪除的時候在mapper.xml用了下面的多個delete語句 <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"…

Spring Cloud 系列之OpenFeign:(7)鏈路追蹤zipkin

傳送門 Spring Cloud Alibaba系列之nacos&#xff1a;(1)安裝 Spring Cloud Alibaba系列之nacos&#xff1a;(2)單機模式支持mysql Spring Cloud Alibaba系列之nacos&#xff1a;(3)服務注冊發現 Spring Cloud 系列之OpenFeign&#xff1a;(4)集成OpenFeign Spring Cloud …

PHP酒店點菜管理系統mysql數據庫web結構apache計算機軟件工程網頁wamp

一、源碼特點 PHP 酒店點菜管理系統是一套完善的web設計系統&#xff0c;對理解php編程開發語言有幫助&#xff0c;系統具有完整的源代碼和數據庫&#xff0c;系統主要采用B/S模式開發。 代碼下載 https://download.csdn.net/download/qq_41221322/88232051 論文 https://…