Kubernetes集群網絡:k8s對外暴露服務的方式

閱讀:503 2023-11-08 23:44:02

一、Master集群網絡

master集群的網絡比較簡單,和通常的負載均衡集群一樣。多個節點的apiserver的ip與端口(6443)使用負載均衡的ip與端口。在master/node節點join時均使用此負載均衡的ip與端口,這樣就是master節點的集群網絡。

  • master 節點之間的網絡:如果有多個 master 節點,它們之間需要通過 etcd 這個分布式鍵值存儲來保持數據的一致性。etcd 通常使用 Raft 協議來實現高可用和容錯性,它需要每個節點之間都能夠互相通信,因此需要配置一個可靠的網絡連接。
  • master 節點和 node 節點之間的網絡:master 節點和 node 節點之間需要通過 kube-apiserver 這個組件來進行通信。kube-apiserver 是 master 節點上運行的組件,它提供了 RESTful 的 API 接口,供外部客戶端和內部組件訪問 k8s 集群的資源和狀態。node 節點上運行著 kubelet 和 kube-proxy 這兩個組件,它們需要定期向 kube-apiserver 匯報節點和 Pod 的信息,或者接收 kube-apiserver 的指令。因此,需要配置一個安全和穩定的網絡連接。
  • master 節點和外部客戶端之間的網絡:外部客戶端可以通過 kubectl 命令行工具或者其他方式來訪問 master 節點上的 kube-apiserver,從而對 k8s 集群進行管理和操作。為了保證安全性和可訪問性,需要配置一個合適的網絡地址和端口,并且使用 TLS/SSL 加密通信。

二、Node集群網絡

K8s集群對外暴露服務的方式主要有以下幾種:

  • NodePort:將服務暴露到集群中每個節點的固定端口,客戶端可以通過節點的 IP 地址和端口訪問服務。
  • LoadBalancer:使用云平臺的負載均衡器將服務暴露到公網,客戶端可以通過公網 IP 地址和端口訪問服務。
  • Ingress:使用 Ingress 控制器將服務暴露到公網,并提供統一的域名訪問。

1、NodePort

NodePort 是 Kubernetes 提供的一種最簡單的服務暴露方式。當 Service 的類型為 NodePort 時,Kubernetes 會為該 Service 分配一個固定的端口,該端口會映射到集群中每個節點的相同端口??蛻舳丝梢酝ㄟ^集群中任何節點的 IP 地址和端口訪問服務。

NodePort 的配置非常簡單,只需要在 Service 的 spec 中設置 type 為 NodePort,并指定端口號即可。例如,以下 YAML 定義了一個 NodePort 服務:

復制
apiVersion: v1
kind: Service metadata: name: nginx
spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 30000
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
 

該服務將暴露到集群中每個節點的 30000 端口??蛻舳丝梢酝ㄟ^集群中任何節點的 IP 地址和 30000 端口訪問該服務。

NodePort 的優點是簡單易用,可以快速將服務暴露到集群外部。但是,NodePort 也有一定的缺點。
Kubernetes NodePort 類型的服務將在每個節點上暴露一個端口,并分配一個 cluster IP 地址。外部客戶端可以通過 <NodeIP>:<NodePort> 來訪問該服務。NodePort 類型的服務適用于需要在集群外部訪問的服務,例如 Web 服務。

NodePort 類型的服務有以下優點:

  • 配置簡單,只需要指定 type: NodePort 即可。
  • 部署快速,不需要額外的組件。
  • 可用于任何類型的服務,包括 HTTP、TCP 和 UDP。

NodePort 類型的服務也有以下缺點:

  • 端口范圍有限,只能使用 30000-32767 之間的端口。
  • 每個端口只能提供一種服務,無法同時提供多個服務。
  • 需要手動打開防火墻來允許外部流量進入集群。

2、LoadBalancer

LoadBalancer 是 Kubernetes 提供的一種更高級的服務暴露方式。當 Service 的類型為 LoadBalancer 時,Kubernetes 會在云平臺上創建一個負載均衡器(一般付費購買相應的負載均衡產品),并將該負載均衡器綁定到 Service 上??蛻舳丝梢酝ㄟ^負載均衡器的公網 IP 地址和端口訪問服務。

LoadBalancer 類型的服務有以下優點:

  • 具有高可用性,可以保證服務始終可用。
  • 可以為多個服務提供負載均衡,提高服務的性能。
  • 可以使用任意端口來暴露服務。
  • 可以為服務提供 SSL/TLS 保護。

LoadBalancer 類型的服務也有以下缺點:

  • 配置復雜,需要指定負載均衡器的類型和配置。
  • 部署需要額外的時間和資源。
  • 可能需要額外付費,具體取決于負載均衡器的類型。

3、Ingress

Ingress 是 Kubernetes 提供的一種更靈活的服務暴露方式。Ingress 控制器可以將多個 Service 統一到一個域名下,并提供路由規則,使得客戶端可以通過統一的域名訪問不同的Service。

具體選擇哪種方式需要根據實際需求來決定。如果需要快速部署服務,NodePort 是一個不錯的選擇。如果需要將服務暴露到公網,LoadBalancer 或 Ingress 是更好的選擇。

它具有以下優點:

  • 靈活性和強大功能:Ingress 可以根據請求的路徑、主機名、HTTP 方法等來路由流量到不同的 Service。Ingress 還可以提供負載均衡、SSL/TLS 保護、緩存等功能。
  • 易用性:ngress 的配置簡單,可以使用 YAML 文件來定義 Ingress 規則。
  • 可擴展性:Ingress 可以使用多個 Ingress Controller 來實現負載均衡和高可用性。

Ingress 的缺點:

  • 性能開銷:Ingress Controller 需要在集群中運行,會消耗一定的資源。
  • 復雜性:Ingress 的配置可能比較復雜,需要一定的學習成本。

三、相關問題

1、已經有了Service為什么還需要ingress?

Kubernetes Service 和 Ingress 都是用來將 Kubernetes 服務暴露給外部世界的資源對象。它們之間主要的區別如下:

  • Service是Kubernetes 的核心概念,用于將 Pod 集合抽象成一個邏輯單元,并提供一個統一的訪問入口。Service 有四種類型:ClusterIP、NodePort、LoadBalancer 和 ExternalName。其中,ClusterIP 類型的 Service 只在集群內部可用,NodePort 類型的 Service 在集群內部和集群外部都可用,LoadBalancer 類型的 Service 在集群外部可用,ExternalName 類型的 Service 指向一個外部主機或域名。
  • Ingress 是 Kubernetes 的擴展資源對象,用于為 Service 提供更靈活和強大的路由功能。Ingress 可以根據請求的路徑、主機名、HTTP 方法等來路由流量到不同的 Service。Ingress 還可以提供負載均衡、SSL/TLS 保護、緩存等功能。

因此,Service 和 Ingress 可以結合起來使用,以實現更靈活和強大的服務路由功能。例如,可以使用 Service 將 Pod 集合抽象成一個邏輯單元,然后使用 Ingress 為該 Service 提供路由和負載均衡功能。

2、是否可以使用nginx代替ingress?

Ingress 和外部 Nginx 之間的主要區別如下:

  • 部署位置:Ingress 是 Kubernetes 中的資源對象,需要在 Kubernetes 集群中部署。外部 Nginx 可以部署在 Kubernetes 集群外部,也可以部署在 Kubernetes 集群內部。
  • 管理方式:Ingress 由 Kubernetes 控制器管理,可以使用 Kubernetes API 來管理 Ingress。外部 Nginx 需要通過外部工具或命令來管理。
  • 功能:Ingress 提供了更豐富的功能,例如負載均衡、SSL/TLS 保護、緩存等。外部 Nginx 可以通過插件來擴展功能,但可能不如 Ingress 的功能豐富。

Ingress 是 Kubernetes 中更完整的解決方案,它提供了更豐富的功能和更靈活的配置方式。如果您需要使用 Kubernetes 集群中的所有功能,那么使用 Ingress 是更好的選擇。

以下是一些使用外部 Nginx 代替 Ingress 的場景:

  • 您已經有現有的 Nginx 服務器,并且不想部署 Ingress。
  • 您需要使用外部 Nginx 的特定功能,例如特定的插件或配置。
  • 您需要將 Kubernetes 服務暴露到外部網絡,但不需要使用 Ingress 的所有功能。

3、NodePort vs Ingress

  • NodePort是一種簡單易用的外部訪問方式,它在所有節點上開放一個端口,轉發流量到服務。它的優點是不需要額外的IP地址或負載均衡器,但它的缺點是端口范圍有限(30000-32767),不安全(容易被攻擊),不支持七層協議(無法根據域名或路徑路由),并且性能受限于節點數 。
  • Ingress是一種強大靈活的外部訪問方式,它在多個服務前端,根據路徑或域名路由流量到服務。它的優點是可以暴露多個服務,支持HTTP/HTTPS協議,提供高性能和高可用性,并且可以集成各種插件和功能(如SSL/TLS終止、認證、重寫、限流等)。但它的缺點是復雜難懂,需要額外的控制器和插件,以及云環境或物理設備提供的負載均衡器 。

四、部署應用的步驟

在 k8s node 集群節點部署的 java 應用,要想向外提供訪問服務,需要使用 k8s 的 Service 和 Ingress 這兩個資源對象。Service 是一種抽象,它定義了一組 Pod 的邏輯訪問方式,可以實現 Pod 之間和 Pod 與外部網絡之間的負載均衡和服務發現。Ingress 是一種規則集合,它定義了如何將外部請求路由到集群內部的 Service 上,可以實現域名、路徑、SSL/TLS 等高級功能 。具體可以通過以下幾個步驟來實現:

  • 首先,需要在 node 節點上創建一個 Deployment對象,來定義 java 應用的 Pod 的數量、規格、鏡像等信息,并且為每個 Pod 分配一個 IP 地址。
  • 然后,需要在 node 節點上創建一個 Service 對象,來定義 java 應用的訪問方式,如端口、協議、選擇器等信息,并且為 Service 分配一個虛擬 IP 地址。
  • 接著,需要在 node 節點上創建一個 Ingress 對象,來定義 java 應用的外部訪問規則,如域名、路徑、證書等信息,并且為 Ingress 分配一個公網 IP 地址或者域名。
  • 最后,需要在 node 節點上安裝一個 Ingress Controller 組件,如 nginx-ingress、traefik 等,來根據 Ingress 對象的規則,將外部請求轉發到對應的 Service 上。
相關文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感興趣
推薦閱讀 更多>
推薦商標

{{ v.name }}

{{ v.cls }}類

立即購買 聯系客服
主站蜘蛛池模板: 精品无码综合一区二区三区| 久久亚洲精品无码aⅴ大香| 无码免费一区二区三区免费播放| 国产AV无码专区亚洲Av| 亚洲中文字幕无码久久| 亚洲国产91精品无码专区| 日韩免费无码视频一区二区三区 | 亚洲国产成人无码AV在线| 国产综合无码一区二区色蜜蜜 | 伊人天堂av无码av日韩av| 久久精品无码av| 亚洲AV无码国产精品永久一区| 夜夜添无码一区二区三区| 国产综合无码一区二区色蜜蜜| 日韩AV无码久久一区二区| 久久久精品人妻无码专区不卡| 熟妇人妻无码xxx视频| 免费无码一区二区三区 | 国产精品ⅴ无码大片在线看| 熟妇人妻无码中文字幕老熟妇| 日韩AV无码精品人妻系列| 久久精品无码精品免费专区| 人妻无码中文字幕| 少妇无码太爽了不卡视频在线看| 精品无码一区二区三区电影| 无码人妻精品中文字幕免费| 亚洲精品无码久久一线| 中文字幕AV中文字无码亚| 中文字幕丰满乱子伦无码专区| YY111111少妇无码理论片| 国产成人无码精品一区不卡| 国产精品无码一区二区三区毛片| 无码乱码av天堂一区二区 | 无码人妻丰满熟妇区BBBBXXXX| 少妇人妻偷人精品无码视频 | 色综合久久久无码网中文 | 无码一区二区三区亚洲人妻| 精品人妻系列无码人妻漫画| 国产成人无码A区精油按摩 | 亚洲AV无码专区国产乱码4SE| 日本爆乳j罩杯无码视频|