iT邦幫忙

2024 iThome 鐵人賽

DAY 8
1

前言

在 Kubernetes 中, 和 Service 是一個重要的網絡抽象,它允許應用之間的通信以及將應用暴露給外部。不同類型的 和 Service 適用於不同的場景,根據具體的網絡需求來選擇合適的 和 Service 類型至關重要。接下來,我會詳細介紹 Kubernetes 中的四種主要 和 Service 類型。

ClusterIP (預設類型)

https://ithelp.ithome.com.tw/upload/images/20240908/20140874maAx8PkrsQ.png

  • 用途:

    ClusterIP 是 Kubernetes 的默認 Service 類型。它提供了一個集群內部的虛擬 IP,供集群內的其他服務訪問。這種類型的 Service 適合那些僅需要在集群內部進行通信的應用就像帳一樣,將內部的戰鬥或活動與外部世界隔離開來,保護其內部免受外界干擾。

  • 工作原理:

    當你創建一個 ClusterIP 類型的 Service 時,Kubernetes 會自動分配一個僅在集群內部可見的 IP 地址(即 ClusterIP)。這個 IP 地址可以被集群內的其他 Pod 用來訪問這個 Service。

    當外部流量到達這個 ClusterIP 時,Kubernetes 會將流量根據負載均衡算法轉發到與該 Service 關聯的 Pod 上。

    selector 定義了 Service 應該將流量轉發到哪些 Pod,這些 Pod 必須符合該選擇器中指定的標籤。

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
    

NodePort

https://ithelp.ithome.com.tw/upload/images/20240908/201408744uCUjCdySn.png

  • 用途:

    NodePort Service 將服務暴露在每個集群節點的某個特定端口上,使外部客戶端能夠通過該端口訪問集群內的應用程序。這種類型的 Service 適合那些需要從外部訪問 Kubernetes 集群內應用的場景。

  • 工作原理:

    當你創建一個 NodePort 類型的 Service 時,Kubernetes 會在每個節點的 IP 上分配一個範圍內(通常是 30000-32767)的端口,並將該端口的所有流量路由到與 Service 相關聯的 Pod 上。

    
    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      type: NodePort
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
          nodePort: 30007
    

LoadBalancer

https://ithelp.ithome.com.tw/upload/images/20240908/20140874EtZkSmS3NJ.png

  • 用途:

    LoadBalancer Service 自動配置雲服務提供商的外部負載均衡器,將來自外部的流量分發到集群中的 Service。這種類型的 Service 適合那些需要對外公開並且需要自動負載均衡的應用程序。

  • 工作原理:

    當你創建一個 LoadBalancer 類型的 Service 時,Kubernetes 會向雲服務提供商(如 AWS、GCP、Azure)發出請求,自動創建一個外部負載均衡器。這個負載均衡器會將流量分發到每個集群節點上的 NodePort,然後再將流量轉發到相應的 Pod。

    用戶端只需通過負載均衡器分配的外部 IP 來訪問服務,無需關心 Kubernetes 集群的內部結構。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

ExternalName

  • 用途:

    ExternalName Service 將 Kubernetes 內部的服務名稱映射到一個外部的 DNS 名稱。這類 Service 通常用於將集群內的服務指向集群外部的資源,這樣 Kubernetes 內部的服務可以輕鬆地訪問外部服務。

  • 工作原理:

    ExternalName Service 並不會創建 ClusterIP,也不會處理流量轉發。它的作用是將 Service 名稱解析為指定的外部 DNS 名稱,並返回該名稱的 IP 地址。

    當集群內的 Pod 試圖訪問該 Service 時,實際上會得到一個外部的 DNS 名稱的 IP,這樣集群內部的應用就可以輕鬆地訪問外部資源。

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      type: ExternalName
      externalName: examp
    

◆ 每日咒術小知識

https://ithelp.ithome.com.tw/upload/images/20240908/20140874fmhpfuOVK3.png

參考資料

https://ithelp.ithome.com.tw/articles/10235548

https://kubernetes.io

https://medium.com/k8s%E7%AD%86%E8%A8%98/kubernetes-k8s-%E6%9C%8D%E5%8B%99%E9%96%93%E7%9A%84%E6%BA%9D%E9%80%9A-clusterip-%E5%85%A7%E9%83%A8%E8%A8%AA%E5%95%8F%E6%9C%8D%E5%8B%99%E9%80%A3%E6%8E%A5mysql%E8%B3%87%E6%96%99%E5%BA%AB-kubernetes-service-clusterip-e893320b7323


上一篇
第七篇: 簡易領域 Pod & Static Pod
下一篇
第九篇: Deployment 與 ReplicaSet
系列文
成為 Kubernetes 特級咒術師的 30 天修行26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言