本篇參考官方教學Using a Service to Expose Your App進行操作。
Kubernates的Service是用來定義邏輯Pods組與存取這些Pods政策的抽象,藉此來解耦不同Pods組之間的依賴,並依此對外曝露Pods的應用程式。Service使用YAML或JSON來定義,並使用label selector(標籤選擇器)來決定所代表的Pods。
範例環境:
- MacBook Pro Apple M1 Pro (ARM64)
- macOS Ventura 13.0.1
- Docker Desktop 4.21.1
事前要求
參考「Kubernates 使用Deployment部署應用程式」建立Deployement。
查看Services
在終端機輸入kubectl get services
檢視Service清單,目前只有一個minkube啟動(minikube start
)kubernates時產生的預設kubernetes
Service。
% kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d18h
建立Service
目前有一個已部署的Deployment kubernetes-bootcamp
。
輸入kubectl expose deployment <DEPLOYMENT_NAME> --type="NodePort" --port 8080
建立Service,也就是將Deployment的Pods對外曝露。<DEPLOYMENT_NAME>
為Deployment的名稱。例如下面將Deployment kubernetes-bootcamp
對外曝露為Service。
% kubectl expose deployment kubernetes-bootcamp --type="NodePort" --port 8080
service/kubernetes-bootcamp exposed
查看Service
再次輸入kubectl get services
可看到新建的Service名稱為kubernetes-bootcamp
。
% kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d18h
kubernetes-bootcamp NodePort 10.97.91.51 <none> 8080:31162/TCP 30m
輸入kubectl describe services <SERVICE_NAME>
可查看Service詳細資訊,<SERVICE_NAME>
為Service名稱。
例如下面查看Service kubernetes-bootcamp
的詳細資訊。
% kubectl describe services kubernetes-bootcamp
Name: kubernetes-bootcamp
Namespace: default
Labels: app=kubernetes-bootcamp
Annotations: <none>
Selector: app=kubernetes-bootcamp
Type: NodePort
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.97.91.51
IPs: 10.97.91.51
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 31162/TCP
Endpoints: 10.244.0.9:8080
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
NodePort為對外曝露的port,為31162
。
輸入minikube ip
檢視node的外部ip。
% minikube ip
192.168.49.2
所以Service所代表的Pods對外曝露的IP和port為192.168.49.2:31162
。
取得Service URL
由於運行在Docker容器環境的minikube與本機網路是隔離的,所以必須建立本機與minikube的Service的通道(tunnel)才能從本機連到Service。開啟新的終端機,輸入minikube service <SERVICE_NAME> --url
取得在minikube cluster中Service的URL。
% minikube service kubernetes-bootcamp --url
http://127.0.0.1:50552
❗ Because you are using a Docker driver on darwin, the terminal needs to be open to run it
由上得知Service kubernetes-bootcamp
的URL為127.0.0.1:50552
。
存取應用程式
輸入curl http://127.0.0.1:50552
存取Service所代表Pods中的應用程式。
% curl http://127.0.0.1:50552
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-f95c5b745-ckkdz | v=1
沒有留言:
張貼留言