注意:
- 此教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间示例值。完成实验室时,请将这些值替换为特定于您的云环境的值。
使用 OCI VCN 本机云池网络 CNI 插件向 Oracle Cloud Infrastructure Container Engine for Kubernetes 提供网络服务
简介
默认情况下,Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) 使用 Oracle Cloud Infrastructure (OCI) VCN 原生容器网络接口 (Native Container Network Interface,CNI) 插件为容器化应用提供网络或安全功能。在本教程中,我们将向您展示如何验证使用的 CNI 插件,以及如何使用此默认 CNI 插件(OCI VCN 本机 CNI 插件)配置 OCI 负载平衡器服务并将其附加到在容器内运行的应用程序。
使用 OCI VCN 本机云池网络 CNI 插件的好处是云池或容器将从 VCN 中的专用子网中获取 IP 地址。这意味着您的 Kubernetes 云池与您的 VM(实例)或裸机节点或其他负载位于同一网络中。
目标
- 我们将了解如何验证 OKE 使用的默认 CNI 插件。我们将部署新的 Nginx 容器化应用来测试默认 OCI VCN 本机 CNI 插件的一些基本网络功能,并利用 OCI VCN 本机云池网络 CNI 插件创建负载平衡器类型的新网络服务并将该服务公开给部署的 Nginx 应用。最后,我们将清除应用程序和负载平衡器服务。
任务 1:使用 OKE 部署 Kubernetes 集群
有关我们可以选择的不同 OKE 部署模型的更多信息,请参见 Example Network Resource Configurations 。
OKE 部署模型示例包括:
-
示例 1:使用 Flannel CNI 插件、公共 Kubernetes API 端点、专用 Worker 节点和公共负载平衡器的集群。
-
示例 2:使用 Flannel CNI 插件、专用 Kubernetes API 端点、专用 Worker 节点和公共负载平衡器的集群。
-
示例 3:使用 OCI CNI 插件、公共 Kubernetes API 端点、专用 Worker 节点和公共负载平衡器的集群。
-
示例 4:使用 OCI CNI 插件、专用 Kubernetes API 端点、专用 Worker 节点和公共负载平衡器的集群。
我们将选择示例 3 部署模型。有关详细信息,请参阅设置具有三个 Worker 节点的 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
。
这将显示 OCI VCN 本机云池网络 CNI 插件当前用于此部署的 OKE 部署。
任务 3:部署示例应用程序
我们将在下一个任务中将此示例应用与 OCI VCN 本机云池网络 CNI 插件结合使用,并启用 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 。
可以在下图中找到部署的可视化表示形式。重点关注 worker 节点内部部署的两个 pod。
使用 OCI VCN 本机云池网络 CNI 插件的好处是云池或容器将从 VCN 中的专用子网中获取 IP 地址。这意味着您的 Kubernetes 云池与您的 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 本机云池网络 CNI 插件网络服务负载平衡器类型,并将此新服务公开给应用程序。
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 控制台更深入地了解后台发生了什么。
-
单击网络。
-
单击负载平衡器。
-
-
单击负载平衡器。
- 请注意,部署的新负载平衡器具有以
.167
结尾的公共 IP 地址。 - 单击负载平衡器。
- 请注意,负载平衡器为 ACTIVE 。
- 向下滚动。
- 查看已部署负载平衡器的配置详细信息。
- 单击还原以还原 OCI Cloud Shell。
- 请注意,部署的新负载平衡器具有以
可以在下图中找到负载平衡器部署的可视化表示形式。重点关注负载平衡器。
任务 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 帮助中心。
Use OCI VCN-Native Pods Networking CNI Plugin to Provide Networking Services to Oracle Cloud Infrastructure Container Engine for Kubernetes
F95775-01
March 2024