注意:

使用 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(实例)或裸机节点或其他负载位于同一网络中。

目标

任务 1:使用 OKE 部署 Kubernetes 集群

有关我们可以选择的不同 OKE 部署模型的更多信息,请参见 Example Network Resource Configurations

OKE 部署模型示例包括:

我们将选择示例 3 部署模型。有关详细信息,请参阅设置具有三个 Worker 节点的 Oracle Cloud Infrastructure Container Engine for Kubernetes

任务 2:验证已安装的 CNI 插件

当使用 OKE 的 Kubernetes 集群已完全部署并且您有权访问时,可以运行以下命令。

  1. 运行以下命令。

    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)$ 
    
  2. 请注意,在 pod 部分的输出中,名称为 vcn-native

  3. 请注意,在守护进程集部分的输出中,名称为 vcn-native

图像

这将显示 OCI VCN 本机云池网络 CNI 插件当前用于此部署的 OKE 部署。

任务 3:部署示例应用程序

我们将在下一个任务中将此示例应用与 OCI VCN 本机云池网络 CNI 插件结合使用,并启用 OCI 负载平衡器服务类型。

  1. 运行以下命令在 OKE 中部署示例 Nginx 应用程序。

    iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl apply -f https://k8s.io/examples/application/deployment.yaml 
    deployment.apps/nginx-deployment created
    
  2. 运行以下命令以验证已部署的示例 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)$
    
  3. 请注意,应用程序是使用两个 pod 部署的。

图像

  1. 执行以下命令可更详细地查看部署的 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)$ 
    
  2. 请注意,Nginx 应用程序有两个实例或 pod 或副本,并且状态设置为 RUNNING

图像

可以在下图中找到部署的可视化表示形式。重点关注 worker 节点内部部署的两个 pod。

图像

使用 OCI VCN 本机云池网络 CNI 插件的好处是云池或容器将从 VCN 中的专用子网中获取 IP 地址。这意味着您的 Kubernetes 云池与您的 VM(实例)或裸机节点或其他负载位于同一网络中。

任务 4:配置负载平衡器类型的 Kubernetes 服务

我们已在 OKE 中运行示例应用,现在是时候通过将负载平衡器类型的网络服务连接到应用来向网络或互联网公开应用了。

可以在下图中找到负载平衡器部署的可视化表示形式。重点关注负载平衡器。

图像

任务 5:删除负载平衡器类型的示例应用程序和 Kubernetes 服务

我们部署了示例应用程序并创建了新的负载平衡器类型的 Kubernetes 网络服务,是时候清理应用程序和服务了。

请注意,已不再部署负载平衡器。

图像

可以在下图中找到负载平衡器删除的可视化表示形式。专注于不再部署负载平衡器的部分。

图像

确认

更多学习资源

浏览 docs.oracle.com/learn 上的其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心