데모 애플리케이션 배포

데모 애플리케이션 배포

Star Wars 테마의 데모 애플리케이션(deathstar, tiefighter, xwing)을 Cilium 클러스터에 배포하는 방법을 설명하는 문서예요. 이후 네트워크 보안 정책 테스트를 위한 기본 환경을 준비해요.

출처: Deploy the Demo Application

본문

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 정책 시행이 모두 비활성화 상태예요.

더 알아보기 (Learn more)