精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

源碼解析 Kubectl Port-Forward 工作原理

開發(fā) 前端
本文的源碼基于 Kubernetes v1.24.0,容器運行時使用 Containerd 1.5,從源碼來分析 kubectl port-forward 的工作原理。

本文的源碼基于 Kubernetes v1.24.0,容器運行時使用 Containerd 1.5,從源碼來分析 kubectl port-forward 的工作原理。

通過 port-forward 流程的分析,梳理出 kubectl -> api-server -> kubelet -> 容器運行時 的交互,了解 cri 的工作方式。

圖片kubectl-port-forward

kubectl

簡單創(chuàng)建個 pod:

kubectl run pipy --image flomesh/pipy:latest -n default

在執(zhí)行 kubectl forward 時添加參數(shù) -v 9 打印日志。

kubectl port-forward pipy 8080 -v 9
...
I0807 21:45:58.457986 14495 round_trippers.go:466] curl -v -XPOST -H "User-Agent: kubectl/v1.24.3 (darwin/arm64) kubernetes/aef86a9" -H "X-Stream-Protocol-Version: portforward.k8s.io" 'https://192.168.1.12:6443/api/v1/namespaces/default/pods/pipy/portforward'
I0807 21:45:58.484013 14495 round_trippers.go:553] POST https://192.168.1.12:6443/api/v1/namespaces/default/pods/pipy/portforward 101 Switching Protocols in 26 milliseconds
I0807 21:45:58.484029 14495 round_trippers.go:570] HTTP Statistics: DNSLookup 0 ms Dial 0 ms TLSHandshake 0 ms Duration 26 ms
I0807 21:45:58.484035 14495 round_trippers.go:577] Response Headers:
I0807 21:45:58.484040 14495 round_trippers.go:580] Upgrade: SPDY/3.1
I0807 21:45:58.484044 14495 round_trippers.go:580] X-Stream-Protocol-Version: portforward.k8s.io
I0807 21:45:58.484047 14495 round_trippers.go:580] Date: Sun, 07 Aug 2022 13:45:58 GMT
I0807 21:45:58.484051 14495 round_trippers.go:580] Connection: Upgrade
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

從日志可以看到請求的地址為 /api/v1/namespaces/default/pods/pipy/portforward,其中 portforward 為 pod 資源的子資源。

這里使用的協(xié)議是 spdy。

kubectl 此時會監(jiān)聽本地端口,同時使用 pod 子資源 portforward 的 url 創(chuàng)建到 api-server 的連接。

當本地端口有連接接入時,kubectl 會不斷地在兩個連接間拷貝數(shù)據(jù)。

參考源碼:

  • staging/src/k8s.io/kubectl/pkg/cmd/portforward/portforward.go:389[1]
  • staging/src/k8s.io/client-go/tools/portforward/portforward.go:242[2]
  • staging/src/k8s.io/client-go/tools/portforward/portforward.go:330[3]

api-server

pod 的三個子資源 exec、attach 和 portforward,對這三個資源的操作都會代理有對應(yīng) node 的 kubetlet server 進行處理。

api-server 在接收到訪問 pod 子資源 portforward 的請求后,通過 pod 及其所在 node 的信息,獲取訪問該 node 上 kubelet server 的 url。

然后將訪問 pod 的 portforward 的請求,代理到 kubelet server。

參考源碼

  • pkg/registry/core/pod/rest/subresources.go:185[4]

kubelet

portforward 請求來到了 pod 所在節(jié)點的 kubelet server,在 kubelet server 中,有幾個用于調(diào)試的 endpoint,portforward 便是其中之一:

  • /run/{podNamespace}/{podID}/{containerName}
  • /exec/{podNamespace}/{podID}/{containerName}
  • /attach/{podNamespace}/{podID}/{containerName}
  • /portforward/{podNamespace}/{podID}
  • /containerLogs/{podNamespace}/{podID}/{containerName}
  • /runningpods/

kubelet server 收到請求后,首先會通過 RuntimeServiceClient 發(fā)送 gRCP 請求到容器運行時的接口(/runtime.v1alpha2.RuntimeService/PortForward)獲取容器運行時 streaming server 處理 pordforward 請求的 url。

拿到 portforward streaming 的 url 之后,kubelet server 將請求代理到該 url。

參考源碼

  • pkg/kubelet/server/server.go:463[5]
  • pkg/kubelet/server/server.go:873[6]
  • pkg/kubelet/cri/streaming/portforward/portforward.go:46[7]
  • pkg/kubelet/cri/streaming/server.go:111[8]

cri

這里以 Containerd 為例。

Containerd 在啟動時會啟動 runtime service 和 image service。前者是負責容器相關(guān)的操作,后者負責鏡像相關(guān)的操作。

kubelet 獲取用于端口轉(zhuǎn)發(fā)的 streaming url,就是調(diào)用了 runtime service 的 gRPC 接口完成的。

除了兩個 gRPC service 以外,還加載了一系列插件。這些插件中,其中有一個是 cri service。

cri service 會啟動 streaming server。這個 server 會響應(yīng) /exec、/attach 和 /portforward 的 stream 請求。

portforward 支持兩種操作系統(tǒng) linux 和 windows:sandbox_portforward_linux.go 和 sandbox_portforward_windows.go。

在 linux 上,在 pod 所在的 network namespace 中使用地址 localhost 創(chuàng)建到目標端口的連接。然后在 streaming server 的連接和該連接之間拷貝數(shù)據(jù),完成數(shù)據(jù)的傳遞。

在 windows 上,是通過 wincat.exe 使用地址 127.0.0.1 創(chuàng)建到目標端口的連接。

參考源碼

  • pkg/cri/streaming/server.go:149[9]
  • pkg/cri/server/streaming.go:69[10]
  • pkg/cri/server/service.go:138[11]
  • pkg/cri/server/sandbox_portforward_linux.go:34[12]

總結(jié)

結(jié)合源碼分析對 port-foward 工作原理的梳理,相信對 cri 的工作方式也有了一定的了解。本文是以容器運行時 Containerd 為例,不同的容器運行時雖然實現(xiàn)了 cri,但是實現(xiàn)的細節(jié)上也會有所差異。

比如在 port-forward 的實現(xiàn)上,Kubernetes v1.23.0 版本中的 docker shim(1.24 中被移除)[13] 中,是使用nsenter 進入 pod 所在的 network namespace 中通過 socat 完成的端口轉(zhuǎn)發(fā)。

參考資料

[1] staging/src/k8s.io/kubectl/pkg/cmd/portforward/portforward.go:389: https://github.com/kubernetes/kubernetes/tree/release-1.24/staging/src/k8s.io/kubectl/pkg/cmd/portforward/portforward.go#L389

[2] staging/src/k8s.io/client-go/tools/portforward/portforward.go:242: https://github.com/kubernetes/kubernetes/tree/release-1.24/staging/src/k8s.io/client-go/tools/portforward/portforward.go#L242

[3] staging/src/k8s.io/client-go/tools/portforward/portforward.go:330: https://github.com/kubernetes/kubernetes/tree/release-1.24/staging/src/k8s.io/client-go/tools/portforward/portforward.go#L330

[4] pkg/registry/core/pod/rest/subresources.go:185: https://github.com/kubernetes/kubernetes/tree/release-1.24/pkg/registry/core/pod/rest/subresources.go#L185

[5] pkg/kubelet/server/server.go:463: https://github.com/kubernetes/kubernetes/tree/release-1.24/pkg/kubelet/server/server.go#L463

[6] pkg/kubelet/server/server.go:873: https://github.com/kubernetes/kubernetes/tree/release-1.24/pkg/kubelet/server/server.go#L873

[7] pkg/kubelet/cri/streaming/portforward/portforward.go:46: https://github.com/kubernetes/kubernetes/tree/release-1.24/pkg/kubelet/cri/streaming/portforward/portforward.go#L46

[8] pkg/kubelet/cri/streaming/server.go:111: https://github.com/kubernetes/kubernetes/tree/release-1.24/pkg/kubelet/cri/streaming/server.go#L111

[9] pkg/cri/streaming/server.go:149: https://github.com/containerd/containerd/tree/release/1.5/pkg/cri/streaming/server.go#L149

[10] pkg/cri/server/streaming.go:69: https://github.com/containerd/containerd/tree/release/1.5/pkg/cri/server/streaming.go#L69

[11] pkg/cri/server/service.go:138: https://github.com/containerd/containerd/tree/release/1.5/pkg/cri/server/service.go#L138

[12] pkg/cri/server/sandbox_portforward_linux.go:34: https://github.com/containerd/containerd/tree/release/1.5/pkg/cri/server/sandbox_portforward_linux.go#L34

[13] Kubernetes v1.23.0 版本中的 docker shim(1.24 中被移除): https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/kubelet/dockershim/docker_streaming_others.go#L43

責任編輯:武曉燕 來源: 云原生指北
相關(guān)推薦

2024-01-18 08:31:22

go實現(xiàn)gorm框架

2020-07-10 09:04:55

HTTPS瀏覽器網(wǎng)絡(luò)協(xié)議

2025-02-06 08:24:25

AQS開發(fā)Java

2021-10-27 16:52:37

LayoutInfl源碼解析

2018-09-18 10:13:37

2024-05-28 00:00:02

Java線程程序

2010-09-26 10:09:25

dhcp relay工

2011-04-07 15:32:25

2021-09-07 06:40:25

AndroidLiveData原理

2011-06-16 15:28:31

正則表達式

2013-05-22 10:39:12

OpenFlowSDN軟件定義網(wǎng)絡(luò)

2021-09-09 06:55:43

AndroidViewDragHel原理

2024-09-04 11:42:17

Vue3.5源碼API

2020-10-10 08:20:27

Spring Boot運行原理代碼

2010-03-22 14:22:23

智能交換機

2012-06-29 13:54:11

Java內(nèi)存原型

2021-08-27 07:47:07

Nacos灰度源碼

2015-10-10 09:39:42

Java線程池源碼解析

2013-06-08 10:11:31

Java線程池架構(gòu)

2021-09-08 06:51:52

AndroidRetrofit原理
點贊
收藏

51CTO技術(shù)棧公眾號

国产午夜精品视频| 精品高清美女精品国产区| 91免费国产视频| 精品一区二区三区四| 动漫av一区| 色系网站成人免费| 男人天堂成人网| 午夜成人免费影院| 精品一区二区综合| 97国产精品久久| 永久免费观看片现看| 一区二区日韩| 在线观看一区日韩| 99在线免费视频观看| 成人全视频高清免费观看| 久久国产成人午夜av影院| 国内精品中文字幕| 91狠狠综合久久久| 亚洲人挤奶视频| 日韩欧美一区在线| av污在线观看| 毛片在线网站| 夜夜揉揉日日人人青青一国产精品| 久久久精彩视频| 精品久久久久成人码免费动漫| 性感少妇一区| 欧美丰满少妇xxxxx| www.日本高清视频| 亚洲+变态+欧美+另类+精品| 欧美一级搡bbbb搡bbbb| 国产三级三级三级看三级| 国产91足控脚交在线观看| 国产精品久久久久婷婷二区次| 国产伦精品一区二区三区| 国产尤物视频在线观看| 日本怡春院一区二区| 欧美亚洲免费电影| 精品无码一区二区三区电影桃花| 精品欧美久久| 亚洲开心激情网| 日本japanese极品少妇| 一区中文字幕电影| 日韩精品专区在线| 波多野结衣免费观看| 国产一区高清| 欧美日韩国产影片| 天天爽天天爽夜夜爽| 亚洲最大网站| 欧美日韩在线视频一区| 久久久久99精品成人片| av免费在线观| 亚洲另类在线一区| 丰满女人性猛交| 老司机在线视频二区| 国产精品网站在线观看| 日韩欧美亚洲v片| 国产黄色片在线观看| 久久久久成人黄色影片| 欧美性bbwbbwbbwhd| 日韩三级电影网| 国产亚洲成年网址在线观看| 欧美色图亚洲自拍| 春暖花开成人亚洲区| 国产日韩av一区二区| 四虎永久国产精品| 欧美jizz18性欧美| 一区二区三区在线高清| 日本免费a视频| 福利在线免费视频| 日韩欧美有码在线| 91蝌蚪视频在线观看| 国产精品.xx视频.xxtv| 欧美精品色综合| 亚洲网中文字幕| 亚洲日本一区二区三区在线| 欧美va亚洲va| 极品粉嫩小仙女高潮喷水久久 | 香港三级日本三级| 亚洲69av| 久久精品视频在线观看| 久久久久无码国产精品不卡| 国产精品亚洲欧美| 国产精品日韩欧美综合| 国产视频手机在线观看| 不卡视频免费播放| 日韩av不卡播放| 黄色av网站在线播放| 亚洲一区免费视频| 天天摸天天碰天天添| 青青草国产一区二区三区| 日韩视频国产视频| 国产精品jizz| 在线电影一区二区| 欧洲美女7788成人免费视频| 中日韩在线观看视频| 国产高清不卡一区二区| 免费在线一区二区| 宅男在线观看免费高清网站| 欧美日韩国产专区| 日本精品一区在线| 日韩大胆成人| 久久中文字幕视频| 国产乱国产乱老熟| 国产资源在线一区| 欧美日韩亚洲免费| 久草在线资源站资源站| 欧美性猛交xxxxxxxx| 性活交片大全免费看| 精品免费一区二区| 91成品人片a无限观看| 97caocao| 久久久精品综合| 日本aa在线观看| 成人h在线观看| 亚洲国产精品久久久久秋霞不卡| 亚洲综合第一区| 亚洲在线电影| 国产麻豆一区二区三区在线观看| 日韩黄色影院| 91高清视频免费看| 亚洲黄色在线网站| 黄色成人91| 亚洲自拍小视频免费观看| 在线观看黄av| 色婷婷狠狠综合| 特级西西人体4444xxxx| 欧美精品黄色| 91久久精品一区| 超碰97在线免费观看| 亚洲国产精品一区二区久久恐怖片| 在线观看免费成人av| 欧美做受69| 欧美激情一区二区久久久| 国产婷婷一区二区三区久久| 欧美精彩视频一区二区三区| 日本成年人网址| 欧美成人午夜77777| 欧美激情精品在线| 国产人妖一区二区三区| 中文字幕一区二区不卡| 激情六月丁香婷婷| 亚洲成在人线免费观看| 97久久精品国产| 日本久久一级片| 亚洲最大成人网4388xx| 国产精品中文久久久久久| 91欧美在线| 91精品视频在线看| av网站免费在线观看| 9191国产精品| 久久国产波多野结衣| 精品在线观看视频| 伊人色综合影院| 日韩欧乱色一区二区三区在线| 一本一本久久a久久精品牛牛影视| 免费日韩一级片| 久久久亚洲综合| 五月婷婷狠狠操| 日韩精品免费| 91麻豆桃色免费看| 羞羞的视频在线看| 亚洲国产精品字幕| 久久国产黄色片| 日本一区二区三区四区 | 精品亚洲porn| 成人国产在线看| 国产日韩三级| 国产91精品网站| 亚洲成a人v欧美综合天堂麻豆| 7777精品伊人久久久大香线蕉最新版| 国产又色又爽又高潮免费| 久久国产精品99精品国产 | 亚洲日本免费| 蜜桃传媒视频麻豆第一区免费观看| 小视频免费在线观看| 亚洲天堂成人在线视频| 在线视频欧美亚洲| 亚洲国产综合在线| 精品无码人妻一区| 久久99精品久久久久久| 福利在线一区二区| 国产日产精品_国产精品毛片| 国产日韩欧美电影在线观看| 婷婷在线播放| 亚洲欧美视频在线| 99久久国产免费| 狠狠色狠色综合曰曰| 在线观看国产精品一区| 国产九色精品成人porny| 蜜臀av无码一区二区三区| 成人羞羞网站入口| 成人蜜桃视频| 影视一区二区三区| 色中色综合影院手机版在线观看 | 综合激情国产一区| 亚洲成人av综合| 在线区一区二视频| 久久久国产精华液| 国产亚洲一区字幕| 欧美熟妇另类久久久久久多毛| 宅男噜噜噜66一区二区| 男人的天堂成人| 亚洲制服欧美另类| 99精品在线直播| 亚洲a∨精品一区二区三区导航| 精品视频9999| 69久久精品| 精品亚洲夜色av98在线观看| 99久久精品国产一区色| 色综合天天综合网天天看片| 日本青青草视频| 中文字幕av一区二区三区| 折磨小男生性器羞耻的故事| 激情国产一区二区| 午夜精品久久久内射近拍高清| 午夜日韩激情| 亚洲第一精品区| 国产精品密蕾丝视频下载| 国产99在线免费| av在线亚洲一区| 国产精品永久免费在线| 夜鲁夜鲁夜鲁视频在线播放| 色综合天天狠天天透天天伊人| 午夜精品一区| 中文字幕欧美精品在线| 色猫av在线| 亚洲精品按摩视频| 国精产品一品二品国精品69xx| 欧美日本国产视频| 波多野结衣黄色网址| 黑人狂躁日本妞一区二区三区| 久久久精品国产sm调教网站| 亚洲免费av观看| 国产午夜手机精彩视频| 国产精品久久久久久久久搜平片| 四虎国产精品成人免费入口| 99国产精品久久久久久久久久| 肉色超薄丝袜脚交| 国产在线精品一区二区| 一女二男3p波多野结衣| 日本欧美久久久久免费播放网| 99久久国产宗和精品1上映| 久久精品卡一| 男女视频一区二区三区| 视频一区视频二区中文字幕| 97在线免费公开视频| av成人国产| 中国丰满人妻videoshd| 亚洲一区二区免费看| 国产中文字幕视频在线观看| 国产日韩欧美一区二区三区在线观看 | 超碰超碰在线观看| 老司机精品视频导航| 日韩欧美国产片| 国产一区二区在线视频| 91香蕉国产线在线观看| 国产精品99久久久久久久vr| 一区二区三区人妻| 高清国产一区二区三区| 国产精品成人99一区无码| 99九九99九九九视频精品| 不卡一区二区在线观看| 国产拍揄自揄精品视频麻豆| 国产一区二区三区视频播放| 136国产福利精品导航| 男人的天堂久久久| 亚洲成av人片一区二区| 亚洲天堂一区在线观看| 91官网在线免费观看| 国产精品久久欧美久久一区| 日韩一级欧美一级| 欧美一区二区在线观看视频| 日韩大片免费观看视频播放| 免费成人av电影| www.xxxx欧美| 丁香花在线影院| 欧洲成人在线视频| 亚洲综合资源| 国产欧美一区二区在线播放| 蜜桃视频欧美| 免费观看中文字幕| 99热这里只有成人精品国产| www.超碰com| 国产成人在线视频播放| av中文字幕免费观看| 国产精品超碰97尤物18| 国产极品美女高潮无套嗷嗷叫酒店 | 日韩精品日韩在线观看| 91亚洲欧美| 97精品在线观看| 啪啪av大全导航福利综合导航| 成人免费看片网站| 日韩欧美自拍| 久久久亚洲精品无码| 美洲天堂一区二卡三卡四卡视频| 亚洲午夜精品在线观看| 久久久久久久久久久电影| 午夜激情福利网| 在线视频亚洲一区| 国精产品一品二品国精品69xx| 一区二区三区天堂av| 91九色国产在线播放| 国产美女主播一区| 日韩成人动漫在线观看| 2021国产视频| 免费在线看成人av| 91玉足脚交白嫩脚丫| 亚洲精品美腿丝袜| 亚洲视屏在线观看| 亚洲国产日韩欧美综合久久| 欧洲不卡视频| 日本aⅴ大伊香蕉精品视频| 日本久久伊人| 一本一本a久久| 欧美一区=区| 俄罗斯黄色录像| 亚洲精品国久久99热| 影音先锋黄色网址| 亚洲男人第一av网站| 国产91足控脚交在线观看| 成人观看高清在线观看免费| 国产成人三级| 国产二区视频在线播放| 丁香一区二区三区| www.av免费| 欧美日韩在线播放一区| 国产一级片在线| 欧洲成人免费视频| 网红女主播少妇精品视频| 99在线精品免费视频| 高清成人免费视频| 欧美成人免费看| 日韩欧美国产不卡| 最新超碰在线| 97视频热人人精品| 一精品久久久| 91网址在线观看精品| 中文字幕一区二区三区精华液 | 亚洲成年人在线| 精灵使的剑舞无删减版在线观看| 91免费看国产| 91精品一区国产高清在线gif| 成人综合久久网| 国产精品不卡一区二区三区| 亚洲一级特黄毛片| 日韩亚洲综合在线| 日韩综合av| ijzzijzzij亚洲大全| 国产做a爰片久久毛片| 国产精品成人69xxx免费视频| 777a∨成人精品桃花网| av网址在线播放| 国产99在线免费| 日韩视频在线一区二区三区| 亚洲久久久久久| 日韩欧美一区二区三区| 秋霞av在线| 国产精品久久电影观看| 色综合久久一区二区三区| www.99r| 一区二区三区四区不卡视频| 亚洲黄色小说网| 91av视频在线播放| 成人精品影院| www,av在线| 亚洲成av人**亚洲成av**| 日本不卡免费播放| 国产精品入口免费视| 久久久久蜜桃| 久久久久亚洲AV成人网人人小说| 午夜日韩在线观看| 美州a亚洲一视本频v色道| 国产精品视频99| 一精品久久久| 无码人妻aⅴ一区二区三区| 欧美性生活影院| 伊人影院在线视频| 久久综合色一本| 黑人精品欧美一区二区蜜桃| 久久伊人成人网| 在线成人免费网站| av一级亚洲| 丁香婷婷激情网| 一区二区三区不卡在线观看 | 伊人久久大香伊蕉在人线观看热v 伊人久久大香线蕉综合影院首页 伊人久久大香 | 亚洲精品视频一区二区三区| 国产精品一级片在线观看| 国内免费精品视频| 日韩在线高清视频| 欧美日韩精品一区二区三区在线观看| 日本www.色| 亚洲国产精品天堂| 在线免费看a| 精品视频导航| 久久99精品久久久久久动态图| 日韩久久久久久久久| 久久国产一区二区三区| 女一区二区三区| 久久婷婷中文字幕| 色综合久久久久久久久|