티스토리 뷰
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
- azure policy
- vmware openstack
- macvlan
- aquasecurity
- Helm Chart
- Jenkinsfile
- kubernetes install
- openstack backup
- socket
- boundary ssh
- ansible
- jenkins
- open policy agent
- kata container
- mattermost
- GateKeeper
- nginx-ingress
- minio
- hashicorp boundary
- OpenStack
- metallb
- ceph
- kubernetes
- DevSecOps
- K3S
- openstacksdk
- minikube
- Terraform
- crashloopbackoff
- wsl2
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |