주:
- 이 사용지침서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 대한 예제 값을 사용합니다. 실습을 마칠 때는 이러한 값을 클라우드 환경과 관련된 값으로 대체하십시오.
OCI VCN-Native Pods Networking CNI 플러그인을 사용하여 Oracle Cloud Infrastructure Container Engine for Kubernetes에 네트워킹 서비스 제공
소개
기본적으로 OKE(Oracle Cloud Infrastructure Container Engine for Kubernetes)는 OCI(Oracle Cloud Infrastructure) VCN-Native Container Network Interface(CNI) 플러그인을 사용하여 컨테이너화된 애플리케이션에 네트워크 또는 보안 기능을 제공합니다. 이 자습서에서는 CNI 플러그인이 사용되는지 확인하고 이 기본 CNI 플러그인(OCI VCN-Native CNI 플러그인)을 사용하여 OCI 로드 밸런서 서비스를 구성하고 컨테이너 내에서 실행되는 애플리케이션에 연결하는 방법을 보여줍니다.
OCI VCN-Native Pods Networking CNI 플러그인을 사용하면 Pod 또는 컨테이너가 VCN의 전용 서브넷에서 IP 주소를 얻을 수 있다는 이점이 있습니다. 즉, Kubernetes 포드는 VM(인스턴스)이나 베어메탈 노드 또는 기타 워크로드와 동일한 네트워크에 있습니다.
목표
- OKE에서 사용되는 기본 CNI 플러그인을 확인하는 방법이 표시됩니다. 새 Nginx 컨테이너화된 애플리케이션을 배치하여 기본 OCI VCN-Native CNI 플러그인의 몇 가지 기본 네트워킹 기능을 테스트하고 OCI VCN-Native Pods Networking CNI 플러그인을 활용하여 로드 밸런서 유형의 새 네트워크 서비스를 생성하고 배치된 Nginx 애플리케이션에 해당 서비스를 노출합니다. 마지막으로 애플리케이션 및 로드 밸런서 서비스를 지웁니다.
작업 1: OKE를 사용하여 Kubernetes 클러스터 배치
선택할 수 있는 여러 OKE 배치 모델에 대한 자세한 내용은 Example Network Resource Configurations을 참조하십시오.
OKE 배치 모델의 예는 다음과 같습니다.
-
예 1: Flannel CNI 플러그인, 공용 Kubernetes API 끝점, 전용 작업자 노드 및 공용 로드 밸런서가 있는 클러스터입니다.
-
예제 2: Flannel CNI 플러그인, 전용 Kubernetes API 끝점, 전용 작업자 노드 및 공용 로드 밸런서가 있는 클러스터입니다.
-
예제 3: OCI CNI 플러그인, 공용 Kubernetes API 끝점, 전용 작업자 노드 및 공용 로드 밸런서를 사용한 클러스터입니다.
-
예제 4: OCI CNI 플러그인, 전용 Kubernetes API 끝점, 전용 작업자 노드 및 공용 로드 밸런서를 사용한 클러스터입니다.
예제 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
입니다. -
daemonset 섹션의 출력에서 이름이
vcn-native
인 것을 확인할 수 있습니다.
OCI VCN-Native Pods Networking CNI 플러그인이 현재 이 배치된 OKE 배치에 사용 중임을 보여줍니다.
작업 3: 샘플 응용 프로그램 배치
이 샘플 애플리케이션을 OCI VCN-Native Pods Networking 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)$
-
응용 프로그램은 두 개의 포드를 사용하여 배치됩니다.
-
다음 명령을 실행하여 배치된 포드를 자세히 살펴봅니다.
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 응용 프로그램에는 두 개의 인스턴스, 포드 또는 복제본이 있고 상태가 RUNNING으로 설정되어 있습니다.
배포에 대한 시각적 표현은 다음 다이어그램에서 확인할 수 있습니다. 워커 노드 내에 배치된 두 포드에 초점을 맞춥니다.
OCI VCN-Native Pods Networking CNI 플러그인을 사용하면 Pod 또는 컨테이너가 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-Native Pods Networking 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 주소를 복사하여 웹 브라우저에 붙여 넣습니다. 이제 Oracle Cloud Infrastructure Container Engine for Kubernetes 내부의 컨테이너에 배치된 Nginx 웹 서버에 액세스할 수 있습니다.
-
또한 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)$
-
로드 밸런서 서비스가 삭제된 것을 확인할 수 있습니다.
-
-
샘플 응용 프로그램을 제거합니다.
-
다음 명령을 실행하여 기존 포드를 검색합니다.
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
-
다음 명령을 실행하여 기존 포드를 다시 검색하고 배치가 삭제되었는지 확인합니다.
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 Network Specialist)
추가 학습 자원
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
F95774-01
March 2024