公開外部 IP 位址以存取叢集中的應用程式
此頁面說明如何建立 Kubernetes 服務物件,以公開外部 IP 位址。
準備開始
- 安裝 kubectl。
- 使用雲端供應商 (例如 Google Kubernetes Engine 或 Amazon Web Services) 建立 Kubernetes 叢集。本教學課程建立外部負載平衡器,這需要雲端供應商。
- 設定
kubectl
以與您的 Kubernetes API 伺服器通訊。如需指示,請參閱您的雲端供應商的文件。
目標
- 執行 Hello World 應用程式的五個執行個體。
- 建立公開外部 IP 位址的服務物件。
- 使用服務物件存取執行中的應用程式。
為在五個 Pod 中執行的應用程式建立服務
在您的叢集中執行 Hello World 應用程式
apiVersion: apps/v1 kind: Deployment metadata: labels: app.kubernetes.io/name: load-balancer-example name: hello-world spec: replicas: 5 selector: matchLabels: app.kubernetes.io/name: load-balancer-example template: metadata: labels: app.kubernetes.io/name: load-balancer-example spec: containers: - image: gcr.io/google-samples/hello-app:2.0 name: hello-world ports: - containerPort: 8080
kubectl apply -f https://k8s.io/examples/service/load-balancer-example.yaml
上述命令會建立部署和相關聯的ReplicaSet。ReplicaSet 有五個Pod,每個 Pod 都執行 Hello World 應用程式。
顯示關於部署的資訊
kubectl get deployments hello-world kubectl describe deployments hello-world
顯示關於您的 ReplicaSet 物件的資訊
kubectl get replicasets kubectl describe replicasets
建立公開部署的服務物件
kubectl expose deployment hello-world --type=LoadBalancer --name=my-service
顯示關於服務的資訊
kubectl get services my-service
輸出類似於
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-service LoadBalancer 10.3.245.137 104.198.205.71 8080/TCP 54s
注意
如果外部 IP 位址顯示為 <pending>,請稍候一分鐘,然後再次輸入相同的命令。顯示關於服務的詳細資訊
kubectl describe services my-service
輸出類似於
Name: my-service Namespace: default Labels: app.kubernetes.io/name=load-balancer-example Annotations: <none> Selector: app.kubernetes.io/name=load-balancer-example Type: LoadBalancer IP: 10.3.245.137 LoadBalancer Ingress: 104.198.205.71 Port: <unset> 8080/TCP NodePort: <unset> 32377/TCP Endpoints: 10.0.0.6:8080,10.0.1.6:8080,10.0.1.7:8080 + 2 more... Session Affinity: None Events: <none>
記下您的服務公開的外部 IP 位址 (
LoadBalancer Ingress
)。在本範例中,外部 IP 位址為 104.198.205.71。另請注意Port
和NodePort
的值。在本範例中,Port
為 8080,而NodePort
為 32377。在上述輸出中,您可以看到服務有數個端點:10.0.0.6:8080、10.0.1.6:8080、10.0.1.7:8080 + 另外 2 個。這些是執行 Hello World 應用程式的 Pod 的內部位址。若要驗證這些是否為 Pod 位址,請輸入此命令
kubectl get pods --output=wide
輸出類似於
NAME ... IP NODE hello-world-2895499144-1jaz9 ... 10.0.1.6 gke-cluster-1-default-pool-e0b8d269-1afc hello-world-2895499144-2e5uh ... 10.0.1.8 gke-cluster-1-default-pool-e0b8d269-1afc hello-world-2895499144-9m4h1 ... 10.0.0.6 gke-cluster-1-default-pool-e0b8d269-5v7a hello-world-2895499144-o4z13 ... 10.0.1.7 gke-cluster-1-default-pool-e0b8d269-1afc hello-world-2895499144-segjf ... 10.0.2.5 gke-cluster-1-default-pool-e0b8d269-cpuc
使用外部 IP 位址 (
LoadBalancer Ingress
) 存取 Hello World 應用程式curl http://<external-ip>:<port>
其中
<external-ip>
是您的服務的外部 IP 位址 (LoadBalancer Ingress
),而<port>
是您的服務描述中Port
的值。如果您使用的是 minikube,輸入minikube service my-service
將會自動在瀏覽器中開啟 Hello World 應用程式。成功請求的回應是 hello 訊息
Hello, world! Version: 2.0.0 Hostname: 0bd46b45f32f
清理
若要刪除服務,請輸入此命令
kubectl delete services my-service
若要刪除部署、ReplicaSet 和執行 Hello World 應用程式的 Pod,請輸入此命令
kubectl delete deployment hello-world
下一步
深入瞭解使用服務連接應用程式。