aws 的pod 有 ip 或者域名嗎

gongchengship發表於2024-07-04

在AWS上使用Kubernetes(如EKS,Elastic Kubernetes Service)時,每個Pod確實都有自己的IP地址,並且可以透過服務(Service)來提供一個域名來訪問這些Pod。以下是詳細解釋:

Pod的IP地址

每個Pod在建立時都會被分配一個獨特的IP地址,這個IP地址在Pod的生命週期內是穩定的。這個IP地址在Kubernetes叢集的網路範圍內是唯一的,並且可以直接用於Pod間通訊。

Kubernetes Service

為了更方便地管理和訪問Pod,Kubernetes提供了Service的概念。Service為一組Pod提供了一個穩定的訪問介面,即一個虛擬IP和域名。

服務型別

  1. ClusterIP(預設)

    • 分配一個叢集內部可訪問的虛擬IP。
    • 只能在叢集內部訪問。
  2. NodePort

    • 在每個節點上開啟一個埠,並將流量轉發到該埠上的服務。
    • 可以從叢集外部訪問(透過:)。
  3. LoadBalancer

    • 為服務建立一個外部負載均衡器(通常是雲提供商提供的LB,如AWS ELB)。
    • 分配一個外部IP,可以從外部訪問。
    • 在AWS上,LoadBalancer型別的服務會建立一個ELB(Elastic Load Balancer)。
  4. ExternalName

    • 將服務對映到外部域名。

在AWS EKS中的實現

在AWS EKS(Elastic Kubernetes Service)中,Pod的IP地址和域名的管理如下:

1. Pod IP地址

  • 每個Pod都有一個獨特的IP地址。
  • 這個IP地址在Kubernetes叢集的網路範圍內是唯一的。
  • Pod之間可以直接透過IP地址通訊。

2. Service的域名

  • Kubernetes Service會為一組Pod提供一個穩定的虛擬IP和DNS名稱。
  • 透過Service,可以使用域名訪問Pod,而不必直接使用Pod IP地址。

3. LoadBalancer Service

  • 當使用LoadBalancer型別的Service時,AWS會自動建立一個ELB,並將流量轉發到相應的Pod。
  • ELB的DNS名稱可以用來訪問Kubernetes叢集中的服務。

示例配置

建立一個Deployment和Service

  1. Deployment:建立一個Nginx Deployment。
  2. Service:建立一個LoadBalancer型別的Service來暴露Nginx應用。
# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
---
# nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: LoadBalancer
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

部署和檢視服務

  1. 部署Deployment和Service

    kubectl apply -f nginx-deployment.yaml
    kubectl apply -f nginx-service.yaml
    
  2. 檢視Service

    kubectl get services
    

    輸出示例:

    NAME            TYPE           CLUSTER-IP       EXTERNAL-IP        PORT(S)        AGE
    nginx-service   LoadBalancer   10.100.200.1     a1b2c3d4e5f6g7.elb.amazonaws.com   80:32412/TCP   5m
    

    其中,EXTERNAL-IP欄位顯示了AWS ELB的DNS名稱,透過這個DNS名稱可以從外部訪問Nginx服務。

總結

在AWS EKS中,Pod有自己的IP地址,Kubernetes Service提供了訪問Pod的域名和虛擬IP。透過不同型別的Service,可以靈活地管理和訪問Pod,包括叢集內部訪問(ClusterIP)、叢集外部訪問(NodePort和LoadBalancer)以及外部域名對映(ExternalName)。對於在AWS上部署的應用,LoadBalancer型別的Service是最常用的,因為它可以自動建立ELB並提供一個外部訪問的DNS名稱。

相關文章