데모 애플리케이션 배포
데모 애플리케이션 배포
Star Wars 테마의 데모 애플리케이션(deathstar, tiefighter, xwing)을 Cilium 클러스터에 배포하는 방법을 설명하는 문서예요. 이후 네트워크 보안 정책 테스트를 위한 기본 환경을 준비해요.
본문
Cilium이 배포되고 kube-dns가 올바르게 동작하면 데모 애플리케이션을 배포할 수 있어요.
Star Wars에서 영감을 받은 이 예제에는 deathstar, tiefighter, xwing 세 개의 마이크로서비스 애플리케이션이 있어요. deathstar는 80 포트에서 HTTP 웹서비스를 실행하며, 죽음의 별로 향하는 요청을 두 개의 파드 레플리카에 부하 분산하는 Kubernetes Service로 노출돼요. deathstar 서비스는 은하 제국의 우주선에 착륙 포트를 요청할 수 있도록 착륙(landing) 서비스를 제공해요. tiefighter 파드는 일반적인 제국 우주선의 착륙 요청 클라이언트 서비스를 나타내고, xwing은 반란 연합 우주선의 유사한 서비스를 나타내요. 이들은 deathstar 착륙 서비스에 대한 접근 제어를 위한 서로 다른 보안 정책을 테스트할 수 있도록 존재해요.
http-sw-app.yaml 파일에는 세 서비스 각각에 대한 Kubernetes Deployment가 들어 있어요. 각 배포는 Kubernetes 라벨(org=empire, class=deathstar), (org=empire, class=tiefighter), (org=alliance, class=xwing)로 식별돼요. 또한 org=empire, class=deathstar 라벨을 가진 모든 파드로 트래픽을 부하 분산하는 deathstar-service도 포함돼요.
$ kubectl create -f https://raw.githubusercontent.com/cilium/cilium/1.20.2/examples/minikube/http-sw-app.yaml
service/deathstar created
deployment.apps/deathstar created
pod/tiefighter created
pod/xwing created
Kubernetes는 파드와 서비스를 백그라운드에서 배포해요. kubectl get pods,svc를 실행하면 작업 진행 상황을 알 수 있어요. 각 파드는 Running 상태에 도달할 때까지 여러 상태를 거치며, 그 시점에 파드가 준비된 거예요.
$ kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/deathstar-6fb5694d48-5hmds 1/1 Running 0 107s
pod/deathstar-6fb5694d48-fhf65 1/1 Running 0 107s
pod/tiefighter 1/1 Running 0 107s
pod/xwing 1/1 Running 0 107s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/deathstar ClusterIP 10.96.110.8 <none> 80/TCP 107s
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3m53s
각 파드는 로컬 cilium 에이전트에서 Cilium의 Endpoint로 나타나요. Cilium 파드 안의 cilium-dbg 도구를 호출해 목록을 확인할 수 있어요(단일 노드 설치에서는 kubectl -n kube-system exec ds/cilium -- cilium-dbg endpoint list가 모두 나열하지만, 다중 노드 설치에서는 같은 노드에서 실행 중인 것만 나열돼요).
$ kubectl -n kube-system get pods -l k8s-app=cilium
NAME READY STATUS RESTARTS AGE
cilium-5ngzd 1/1 Running 0 3m19s
$ kubectl -n kube-system exec cilium-5ngzd -- cilium-dbg endpoint list
ENDPOINT POLICY (ingress) POLICY (egress) IDENTITY LABELS (source:key[=value]) IPv6 IPv4 STATUS
ENFORCEMENT ENFORCEMENT
232 Disabled Disabled 16530 k8s:class=deathstar 10.0.0.147 ready
k8s:io.cilium.k8s.policy.cluster=default
k8s:io.cilium.k8s.policy.serviceaccount=default
k8s:io.kubernetes.pod.namespace=default
k8s:org=empire
726 Disabled Disabled 1 reserved:host ready
883 Disabled Disabled 4 reserved:health 10.0.0.244 ready
1634 Disabled Disabled 51373 k8s:io.cilium.k8s.policy.cluster=default 10.0.0.118 ready
k8s:io.cilium.k8s.policy.serviceaccount=coredns
k8s:io.kubernetes.pod.namespace=kube-system
k8s:k8s-app=kube-dns
1673 Disabled Disabled 31028 k8s:class=tiefighter 10.0.0.112 ready
k8s:io.cilium.k8s.policy.cluster=default
k8s:io.cilium.k8s.policy.serviceaccount=default
k8s:io.kubernetes.pod.namespace=default
k8s:org=empire
2811 Disabled Disabled 51373 k8s:io.cilium.k8s.policy.cluster=default 10.0.0.47 ready
k8s:io.cilium.k8s.policy.serviceaccount=coredns
k8s:io.kubernetes.pod.namespace=kube-system
k8s:k8s-app=kube-dns
2843 Disabled Disabled 16530 k8s:class=deathstar 10.0.0.89 ready
k8s:io.cilium.k8s.policy.cluster=default
k8s:io.cilium.k8s.policy.serviceaccount=default
k8s:io.kubernetes.pod.namespace=default
k8s:org=empire
3184 Disabled Disabled 22654 k8s:class=xwing 10.0.0.30 ready
k8s:io.cilium.k8s.policy.cluster=default
k8s:io.cilium.k8s.policy.serviceaccount=default
k8s:io.kubernetes.pod.namespace=default
k8s:org=alliance
아직 어떤 파드도 선택하는 네트워크 정책이 가져오지지 않았기 때문에, 이 모든 파드에서 ingress와 egress 정책 시행이 모두 비활성화 상태예요.