附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱開始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 憑證、租用戶及區間的範例值。完成實驗室時,請將這些值取代為您雲端環境特有的值。
使用 OCI VCN 原生 Pod 網路 CNI Plugin 將網路服務提供給 Oracle Cloud Infrastructure Container Engine for Kubernetes
簡介
Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) 預設會使用 Oracle Cloud Infrastructure (OCI) VCN 原生容器網路介面 (CNI) 外掛程式,為容器化應用程式提供網路或安全功能。本教學課程將告訴您如何驗證使用的 CNI Plugin,以及如何使用此預設 CNI Plugin (OCI VCN 原生 CNI Plugin) 來設定 OCI 負載平衡器服務,並將其連附至容器內執行的應用程式。
使用 OCI VCN 原生 Pod 網路 CNI Plugin 的優點在於 Pod 或容器將會從 VCN 中的專用子網路取得 IP 位址。這表示您的 Kubernetes Pod 與您的 VM (執行處理) 或裸機節點或其他工作負載位於相同的網路中。
目標
- 我們將瞭解如何驗證 OKE 所使用的預設 CNI 外掛程式。我們將部署新的 Nginx 容器化應用程式來測試預設 OCI VCN 原生 CNI Plugin 的部分基本網路功能,並運用 OCI VCN 原生 Pod 網路 CNI Plugin 來建立新的負載平衡器類型網路服務,並對部署的 Nginx 應用程式顯示該服務。最後,我們將清除應用程式和負載平衡器服務。
作業 1:使用 OKE 部署 Kubernetes 叢集
如需我們可以選擇之不同 OKE 部署模型的詳細資訊,請參閱網路資源組態範例。
OKE 部署模型範例如下:
-
範例 1:具有 Flannel CNI Plugin、Public Kubernetes API 端點、Private Worker 節點以及公用負載平衡器的叢集。
-
範例 2:具有 Flannel CNI Plugin、Private Kubernetes API 端點、Private Worker 節點以及公用負載平衡器的叢集。
-
範例 3:使用 OCI CNI Plugin、Public Kubernetes API 端點、Private Worker 節點以及公用負載平衡器的叢集。
-
範例 4:使用 OCI CNI Plugin、Private Kubernetes API 端點、Private Worker 節點以及公用負載平衡器的叢集。
我們將選取範例 3 部署模型。如需詳細資訊,請參閱設定具有三個工作節點的 Oracle Cloud Infrastructure Container Engine for Kubernetes 。
作業 2:驗證已安裝的 CNI 外掛程式
使用 OKE 的 Kubernetes 叢集完整部署且您可以存取此叢集時,您可以執行下列命令。
-
執行下列命令。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ **kubectl get all -n kube-system** NAME READY STATUS RESTARTS AGE pod/coredns-64ffdf5cf7-lvrhq 1/1 Running 0 2d pod/coredns-64ffdf5cf7-rmxt8 1/1 Running 0 2d pod/coredns-64ffdf5cf7-vq76p 1/1 Running 0 2d pod/csi-oci-node-ghff6 1/1 Running 0 2d pod/csi-oci-node-jrjpr 1/1 Running 0 2d pod/csi-oci-node-r68qz 1/1 Running 1 (2d ago) 2d pod/kube-dns-autoscaler-5bb955d5c-r2j2q 1/1 Running 0 2d pod/kube-proxy-5cznp 1/1 Running 0 2d pod/kube-proxy-fddrd 1/1 Running 0 2d pod/kube-proxy-sb769 1/1 Running 0 2d pod/proxymux-client-7s7f9 1/1 Running 0 2d pod/proxymux-client-lngrm 1/1 Running 0 2d pod/proxymux-client-qxlf2 1/1 Running 0 2d **pod/vcn-native-ip-cni-hkfjz 1/1 Running 0 2d pod/vcn-native-ip-cni-pdv4c 1/1 Running 0 2d pod/vcn-native-ip-cni-qfvk8 1/1 Running 0 2d** NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kube-dns ClusterIP 10.96.5.5 <none> 53/UDP,53/TCP,9153/TCP 2d NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/csi-oci-node 3 3 3 3 3 <none> 2d daemonset.apps/kube-proxy 3 3 3 3 3 beta.kubernetes.io/os=linux 2d daemonset.apps/node-termination-handler 0 0 0 0 0 oci.oraclecloud.com/oke-is-preemptible=true 2d daemonset.apps/nvidia-gpu-device-plugin 0 0 0 0 0 <none> 2d daemonset.apps/proxymux-client 3 3 3 3 3 node.info.ds_proxymux_client=true 2d **daemonset.apps/vcn-native-ip-cni 3 3 3 3 3 <none> 2d** NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/coredns 3/3 3 3 2d deployment.apps/kube-dns-autoscaler 1/1 1 1 2d NAME DESIRED CURRENT READY AGE replicaset.apps/coredns-64ffdf5cf7 3 3 3 2d replicaset.apps/kube-dns-autoscaler-5bb955d5c 1 1 1 2d iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
請注意,Pod 區段輸出中的名稱為
vcn-native
。 -
請注意,名稱在常駐程式集區段的輸出中為
vcn-native
。
這會顯示此部署的 OKE 部署目前使用 OCI VCN 原生 Pod 網路 CNI Plugin。
作業 3:建置範例應用程式
我們會將此範例應用程式與 OCI VCN 原生 Pod 網路 CNI Plugin 搭配使用,並在下一項作業中啟用 OCI 負載平衡器服務類型。
-
執行下列命令,在 OKE 內部署範例 Nginx 應用程式。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl apply -f https://k8s.io/examples/application/deployment.yaml deployment.apps/nginx-deployment created
-
執行下列命令以驗證已部署範例 Nginx 應用程式的詳細資訊。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl describe deployment nginx-deployment Name: nginx-deployment Namespace: default CreationTimestamp: Fri, 08 Mar 2024 07:57:02 +0000 Labels: <none> Annotations: deployment.kubernetes.io/revision: 1 Selector: app=nginx Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.14.2 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: <none> NewReplicaSet: nginx-deployment-86dcfdf4c6 (2/2 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 14s deployment-controller Scaled up replica set nginx-deployment-86dcfdf4c6 to 2 iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
請注意,應用程式是使用兩個 Pod 來部署。
-
執行下列命令,以更深入瞭解部署的 Pod。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-86dcfdf4c6-fdxgz 1/1 Running 0 3m46s nginx-deployment-86dcfdf4c6-fqrkh 1/1 Running 0 3m46s iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
請注意,Nginx 應用程式有兩個執行處理或 Pod 或複本,且狀態會設為 RUNNING 。
您可以在下列圖表中找到部署的視覺化表示法。聚焦在工作節點內部部署的兩個 Pod。
使用 OCI VCN 原生 Pod 網路 CNI Plugin 的優點在於 Pod 或容器將會從 VCN 中的專用子網路取得 IP 位址。這表示您的 Kubernetes Pod 與您的 VM (執行處理) 或裸機節點或其他工作負載位於相同的網路中。
作業 4:設定負載平衡器類型的 Kubernetes 服務
我們已在 OKE 內執行範例應用程式,只要將負載平衡器類型的網路服務連附至應用程式,即可將應用程式公開至網路或網際網路。
-
檢查 Kubernetes 叢集中現有的執行中服務。
-
執行下列命令以複查 Kubernetes 叢集中現有的執行中服務。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 2d23h iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
請注意,唯一執行中的服務屬於 Kubernetes 控制平面。
-
-
將網路服務增加至應用程式。
-
請執行下列命令來部署新的 OCI VCN 原生 Pod 網路 CNI Plugin 網路服務 (負載平衡器類型),並且將此新服務公開給應用程式。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl expose deployment nginx-deployment --type=LoadBalancer --name=my-service service/my-service exposed iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
請注意,服務已成功顯示。
-
-
檢查 Kubernetes 叢集中現有的執行中服務。
-
執行下列命令以複查 Kubernetes 叢集中現有的執行中服務。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 2d23h my-service LoadBalancer 10.96.209.132 xxx.xxx.xxx.167 80:32291/TCP 53s iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
請注意,我們剛才設定的服務現在已列在清單中。
-
請注意,已指定給以
.167
結尾之負載平衡器的EXTERNAL-IP
(公用 IP 位址)。 -
按一下最小化圖示即可將 OCI Cloud Shell 降到最低。
-
-
複製公用 IP 位址並貼到 Web 瀏覽器中,我們現在可以存取部署在 Oracle Cloud Infrastructure Container Engine for Kubernetes 內容器上的 Nginx Web 伺服器。
-
我們也可以使用 OCI 主控台,更深入瞭解背景中所發生的情況。
-
按一下網路。
-
按一下負載平衡器。
-
-
按一下負載平衡器。
- 請注意,部署了新的負載平衡器,其公用 IP 位址結尾為
.167
。 - 按一下負載平衡器。
- 請注意,負載平衡器為 ACTIVE 。
- 向下拉清單。
- 請複查已部署負載平衡器的組態詳細資訊。
- 按一下回復即可回復 OCI Cloud Shell。
- 請注意,部署了新的負載平衡器,其公用 IP 位址結尾為
下圖提供負載平衡器部署的視覺化呈現方式。聚焦於負載平衡器。
工作 5:移除負載平衡器類型的範例應用程式和 Kubernetes 服務
我們已部署範例應用程式並建立新的負載平衡器類型 Kubernetes 網路服務,是時候清理應用程式和服務了。
-
移除負載平衡器服務。
-
請執行下列命令以刪除負載平衡器服務。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete service my-service -n default service "my-service" deleted
-
請注意,負載平衡器服務已順利刪除。
-
執行下列命令以驗證負載平衡器服務已被刪除。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 2d23h iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
請注意,負載平衡器服務已被刪除。
-
-
移除範例應用程式。
-
執行下列指令來擷取現有的 Pod。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-86dcfdf4c6-fdxgz 1/1 Running 0 36m nginx-deployment-86dcfdf4c6-fqrkh 1/1 Running 0 36m
-
請注意,Nginx 應用程式仍在執行中。
-
執行下列命令以刪除 Nginx 應用程式的部署。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete deployment nginx-deployment --namespace default deployment.apps "nginx-deployment" deleted
-
請執行下列命令再次擷取現有的 Pod,並確認部署已被刪除。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods No resources found in default namespace. iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
請注意,Nginx 應用程式已刪除。
-
按一下最小化圖示即可將 OCI Cloud Shell 降到最低。
- 請注意,OCI 主控台會顯示一則訊息,說明負載平衡器已被刪除。
- 按一下關閉。
-
請注意,已不再部署任何負載平衡器。
下圖提供負載平衡器刪除的視覺化呈現。聚焦於不再部署負載平衡器的部分。
相關連結
認可
- 作者 - Iwan Hoogendoorn (OCI 網路專家)
其他學習資源
瀏覽 docs.oracle.com/learn 的其他實驗室,或前往 Oracle Learning YouTube 頻道存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Use OCI VCN-Native Pods Networking CNI Plugin to Provide Networking Services to Oracle Cloud Infrastructure Container Engine for Kubernetes
F95776-01
March 2024