iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 21
0

前一篇我們只做到把 Pod 建立起來,但如果要讓 Pod 之間可以互相溝通,或讓人從外部跟存取叢集,還需要建立 Service 物件才行。

儘管每個 Pod 有一個獨立的 IP 位址,但這些都是只是虛擬 IP (virtual IP),如果沒有 Service 物件的協助,我們還是無法從外部來接觸到這些資源。

如果說第一步是建立 deployment 物件,那建立 Service 物件,肯定就是第二步驟了。

Service 的類型

  • ClusterIP(預設):使用內部的 IP 來公開服務,需搭配類似 ingress 才能取得 public IP。
  • NodePort:使用 NAT 方式來公開服務,例如 <NodeIP>:<NodePort>
  • LoadBalancer:使用雲端的 Load balancer,Service 可以配派到一個 public IP。
  • ExternalName

建立一個 nginx deployment

建立一個 nginx-deployment

kubectl create deployment nginx-deployment --image nginx

# 輸出結果
# deployment.apps/nginx-deployment created

查看 deployment

kubectl get deployment

# 輸出結果
# NAME               READY   UP-TO-DATE   AVAILABLE   AGE
# nginx-deployment   1/1     1            1           72s

建立一個 nginx service

替這個 deployment 建立一個 service

kubectl expose deploy nginx-deployment --type=LoadBalancer --port=80 --name=nginx-service

查看 service

kubectl get svc/nginx-service

# 輸出結果
# NAME            TYPE           CLUSTER-IP    EXTERNAL-IP       PORT(S)        AGE
# nginx-service   LoadBalancer   10.15.241.2   107.167.176.121   80:32566/TCP   65s

或用 yaml 的方式來建立 service 物件

kubectl apply -f nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx-deployment
  name: nginx-service
spec:
  type: LoadBalancer
  ports:
    - port: 80
  selector:
    app: nginx-deployment

上一篇
Day20 - Kubernetes Deployment
下一篇
Day22 - Ingress Controller
系列文
誤入 DevOps 叢林的後端工程師30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言