$ kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP ... 생략 ...
10.0.10.111 Ready node 11d v1.25.4 10.0.10.111 130.162.111.222 ...
10.0.10.112 Ready node 11d v1.25.4 10.0.10.112 146.156.111.110 ...
##
## 위 worker node 정보 중에서 "EXTERNAL-IP"를 이용하여 SSH 접속
## (Oracle OS를 사용했다면, opc가 기존 계정이다)
##
$ ssh opc@130.162.111.222
(암호 없이 private key를 통해 인증 완료)
##
## 주의: OKE Cluster 구축할 때 사용한 node의 private key, public key 쌍 중에서 private key를
## 내 Client PC에 가지고 있어야 위와 같이 접속된다.
## 그러므로, 꼭 private key 관리를 잘 해야 한다.
##
Amazon EKS, Azure AKS, Google GKE 등과 비슷하게 Oracle OKE에서도 Network LB가 제공된다.
Managed Kubernetes를 사용할 때 항상 등장하는 Load Balancer와 Network Load Balancer가 비슷하면서 약간 다른데,
Oracle Cloud Infrastructure의 User Manual에는 아래와 같이 설정하고 있다.
Load Balancer
A Load Balancer improves resource utilization, facilitates scaling, and helps ensure high availability. You can configure multiple load balancing policies and application-specific health checks to ensure that the load balancer directs traffic only to healthy instances. Includes: advanced proxy features such as layer-7 routing and SSL termination.
그림에서 묘사한 것처럼
HTTP
HTTPS
TCP
프로토콜을 사용하는 Backend 서비스만 지원한다.
따라서 UDP나 Dedicated Protocol을 사용하는 Backend 서비스가 있는 경우에 이 LB를 사용할 수 없다. ㅠㅠ
Network Load Balancer (일명, NLB)
A Network Load Balancer is a non-proxy layer-4 load balancing solution. It offers a scalable VIP to the customer and additionally provides the benefits of flow high availability, low latency, and source IP and port preservation. Includes:layer-4 pass-through load balancing and client header preservation.
그림에서 묘사한 것처럼
TCP
UDP # <-- 이것이 LB와 NLB가 다른 부분이다.
기타... 아무거나 다 (Any ~~~) # <-- 이것이 LB와 NLB가 다른 부분이다.
프로토콜을 사용하는 Backend 서비스를 지원한다.
그런데 Oracle Cloud Infra에서는 이 NLB(Network LB)는 3개까지만 사용하도록 제한하고 있다.
OCI Web Console에서는 이 NLB Max Limit을 설정하는 메뉴가 안 보이는데, 아마 Oracle에 직접 전화해서 NLB 개수를 Upgrade해야 하는 것 같다. (아직, 확실하진 않고... 내일 Oracle에 한번 전화해서 물어봐야겠다..)
순서로 메뉴를 클릭하고, Quick Start 방식로 몇 가지 기본 설정 값만 정해주면 너무나 간단하게 Kubernetes Cluster가 생성된다.
주의: 동일한 Spec의 Cluster 구축이라고 하더라도 Cluster Infra 상황에 따라 어떤 경우는 5분만에 Cluster가 생성되고, 어떤 경우는 15분이 넘도록 Cluster 생성이 완료되지 않는다. 그래서 마음편하게, Cluster 생성 버튼을 누르고 20분 정도 다른 업무를 하다가 오는 것이 좋다.
내 PC (Macbook)에서 OKE Cluster에 접근하기 (Bastion 구성)
Oracle이 너무 간단하게 만들어 놓아서 굳이 장황하게 설명할게 없다.
아래 Web Page에서 아래 빨간 번호 순서로 따라 하기만 하면 된다.
당연한 말이겠지만, 내 Macbook은 Public Network을 통해서 Oracle Cloud Infra에 접근해야 하니까, 아래 그림의 (6)번 절차에서 "VNC-Native public endpoint"와 관련된 명령을 복사해서 내 Macbook의 iTerm에 붙여 넣어야 한다.
위 절차를 끝낸 후, 내 Macbook의 iTerm 터미널에서 아래와 같이 명령을 수행하면 명령이 잘 수행되는 것을 확인할 수 있다.
$ kubectl get node
NAME STATUS ROLES AGE VERSION
10.0.10.121 Ready node 3m7s v1.24.1
10.0.10.124 Ready node 2m59s v1.24.1
10.0.10.127 Ready node 2m55s v1.24.1
$
주의: 위 절차를 따라할 때, (5) ~ (6) 단계 사이에서 아래의 명령을 한번 수행해야 한다. 기존에 사용하던 KUBECONFIG 환경 변수가 설정된 경우라면, (6) 단계가 실패한다.
$ unset KUBECONFIG
Tip: [ Multi cluster를 운영하는 경우 ] 예를 들어서 OKE kubernetes에서 cluster2, cluster3 등 2개의 cluster를 생성하여 운영하는 경우라면 아래와 같이 .kube/config 파일 이름을 변경해서 사용하는 것을 추천.
$ mv $KUBECONFIG/config $KUBECONFIG/config.cluster2
$ cat .bashrc
... 중간 생략 ...
function use-oke-cluster2() {
AA=$(printf "\033[")
export KUBECONFIG=~/.kube/config.cluster2
echo "${AA}32m"
echo "Cluster Name :" $(cat $KUBECONFIG | yq '.clusters[0].name')
echo "Cluster API Server:" $(cat $KUBECONFIG | yq '.clusters[0].cluster.server')
echo "${AA}0m"
}
... 중간 생략 ...
$ use-oke-cluster2
Cluster Name : cluster-cja9kqodr9l
Cluster API Server: https://193.135.212.37:6443
$ kubectl get node
NAME STATUS ROLES AGE VERSION
10.0.10.115 Ready node 11d v1.25.4
10.0.10.117 Ready node 11d v1.25.4
$