티스토리 뷰

Cloud/Public Cloud

Kata Container on AKS

Jacob_baek 2023. 3. 9. 17:09

kata container

기본적으로 container는 host와 공유된 kernel을 사용하고 cgroup 및 namespace를 통한 자원을 분리하여 사용하는 방식이다.
이러한 방식가운데 host kernel의 취약점이나 악의적인 사용자에 의한 해킹으로 인해 다른 container의 권한이 탈취되는 문제가 발생될수도 있다. 이러한 관점에서 공유된 커널을 VM과 같이 분리된 환경으로 만드는 기술이 kata container 라 볼수 있다.

katacontainer on AKS

현재(2023.03 기준) 으로 node image version이 이렇게 출력되어진다.

  • AKSCBLMariner-V2katagen2-2023.02.15

다음 문서를 기반으로 kata container를 사용할수 있는 node를 생성할 수 있다.

참고로 아직 preview 단계이기에 이점을 인지하고 사용해야 한다.

runtime katacontainer

kata container를 사용할 수 있는 node를 생성하고 나면 다음과 같이 runtimeclass가 확인되어진다.

jacob@JACOBBAEKLAPTOP:~/workspace $ kubectl get runtimeclasses
NAME                     HANDLER   AGE
kata-mshv-vm-isolation   kata      7h15m
runc                     runc      7h15m

실제 runtimeclass에는 다음과 같은 nodeselector 가 추가되어 있어 이를 기반으로 scheduling이 되어진다.

jacob@JACOBBAEKLAPTOP:~/workspace $ kubectl get runtimeclasses kata-mshv-vm-isolation -o yaml
apiVersion: node.k8s.io/v1
handler: kata
kind: RuntimeClass
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"node.k8s.io/v1","handler":"kata","kind":"RuntimeClass","metadata":{"annotations":{},"labels":{"addonmanager.kubernetes.io/mode":"Reconcile","kubernetes.io/cluster-service":"true"},"name":"kata-mshv-vm-isolation"},"scheduling":{"nodeSelector":{"kubernetes.azure.com/kata-mshv-vm-isolation":"true"}}}
  creationTimestamp: "2023-03-08T23:42:29Z"
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
    kubernetes.io/cluster-service: "true"
  name: kata-mshv-vm-isolation
  resourceVersion: "3157246"
  uid: 59aea147-5121-421f-9be5-de7422e75b35
scheduling:
  nodeSelector:
    kubernetes.azure.com/kata-mshv-vm-isolation: "true"

실제 label로 검색해보면 다음과 같은 노드가 확인되어진다.

jacob@JACOBBAEKLAPTOP:~/workspace $ k get no -l kubernetes.azure.com/kata-mshv-vm-isolation="true"
NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool2-33916157-vmss000003   Ready    agent   7h16m   v1.26.0
aks-nodepool2-33916157-vmss000004   Ready    agent   7h16m   v1.26.0
aks-nodepool2-33916157-vmss000005   Ready    agent   7h16m   v1.26.0

실제 kata runtime을 사용하는 pod를 배포하고 node에서 확인해보면

root@aks-nodepool2-33916157-vmss000004 [ / ]# ps -ef | grep -E "kata-v2|kata-container"
root      769829       1  0 07:02 ?        00:00:03 /usr/bin/containerd-shim-kata-v2 -namespace k8s.io -address /run/containerd/containerd.sock -publish-binary /usr/bin/containerd -id ee5c17b226f17c1de85e6097d4271b888fa7e0c580f08669b2e27f95ae99d4d9
root      769844  769829  0 07:02 ?        00:00:00 /usr/libexec/virtiofsd --syslog -o cache=auto -o no_posix_lock -o source=/run/kata-containers/shared/sandboxes/ee5c17b226f17c1de85e6097d4271b888fa7e0c580f08669b2e27f95ae99d4d9/shared --fd=3 -f --thread-pool-size=1 -o announce_submounts
root      769856  769844  0 07:02 ?        00:00:03 /usr/libexec/virtiofsd --syslog -o cache=auto -o no_posix_lock -o source=/run/kata-containers/shared/sandboxes/ee5c17b226f17c1de85e6097d4271b888fa7e0c580f08669b2e27f95ae99d4d9/shared --fd=3 -f --thread-pool-size=1 -o announce_submounts
root      855346  854248  0 07:51 ?        00:00:00 grep --color=auto -E kata-v2|kata-container

위와 같이 containerd-shim-kata 으로 containerd에 연결되어 container가 동작되어지고 VM과 관련된 기술인 virtiofsd로 파일 I/O를 처리하게 되는것으로 보인다.

pod 단에서의 커널 확인

kata container를 써서 다른 kernel이 쓰임을 확인해보자.

실제 document에 나온 trust / untrust pod를 생성해보고 다음과 같은 결과를 확인해보았다.

개인적으로 trust / untrust 명칭이 조금 헷갈려 아래와 같은 표로 정리하여 테스트 하였다.
2개의 노드가 있는 상황에서 node1 의 경우 kata runtime을 사용할 수 있는 노드로 생성하였고 다른 노드는 kata runtime을 사용할 수 없는 기본 node이다.

  runc runtime (node2) runc runtime (node1) kata runtime (node1)
host 5.15.0-1033-azure 5.15.80.mshv2-hvl1.m2 5.15.80.mshv2-hvl1.m2
pod 5.15.0-1033-azure 5.15.80.mshv2-hvl1.m2 5.15.48.1-8.cm2

즉, kata runtime을 사용하는 경우 kata runtime의 주요기능인 VM과 같은 kernel이 분리된 환경을 가지게 됨을 확인 할 수 있었고 실제 좀더 secure한 pod를 동작시켜야 한다면 kata runtime을 사용한 application 배포를 고려해보면 좋을것 같다.

limitation

아직 preview 이기에 제한사항이 존재한다. 정식GA 에서는 변경될수도 있기에 링크만 남겨놓는다.

Disclaim
Microsoft의 공식적인 문서가 아닌 개인의 경험을 바탕으로 작성된 내용임을 알립니다.
This is not official document published by Microsoft. Note that this document is based on personal experience.

'Cloud > Public Cloud' 카테고리의 다른 글

Bicep  (0) 2023.11.07
Azure Custom Policy for AKS cluster  (0) 2023.05.08
Logic Apps for Azure Resource  (0) 2023.04.17
Azure Kubernetes Service and Network Policy  (0) 2023.04.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함