IT/CKA

[CKA독학] Image security / security context / Network Policy

반응형

Image security

  • Private docker image를 사용하기위해서 도커 레지스트리 정보가 필요합니다.
  • 쿠버네티스의 secret을 docker-registry타입으로 생성하고 pod에 적용을 해야합니다.

docker registry 타입 secret 생성 명령어

k create secret docker-registry private-reg-cred --docker-username=dock_user --docker-password=dock_password --docker-server=myprivateregistry.com:5000 --docker-email=dock_user@myprivateregistry.com

pod에 해당 secret적용

apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: <your-private-image>
  imagePullSecrets:
  - name: private-reg-cred

security context

  • security context는 쿠버네티스의 Pod나 컨테이너에 대한 접근 제어 설정, 특수 권한를 설정하는 기능을 제공 합니다.

security context 적용된 pod.yaml예시

  • 프로세스 ID와 그룹 ID를 지정할 수 있음
  • 리눅스 capabilities 를 줄 수 도 있음
apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo-2
spec:
  securityContext:
    runAsUser: 1000
  containers:
  - name: sec-ctx-demo-2
    image: gcr.io/google-samples/node-hello:1.0
    securityContext:
      runAsUser: 2000
      fsGroup: 1000
      capabilities:
        add: ["NET_ADMIN", "SYS_TIME"]

mutlcontainer 구성에서 컨테이너 각각 적용 가능

apiVersion: v1
kind: Pod
metadata:
  name: multi-pod
spec:
  securityContext:
    runAsUser: 1001
  containers:
  -  image: ubuntu
     name: web
     command: ["sleep", "5000"]
     securityContext:
      runAsUser: 1002

  -  image: ubuntu
     name: sidecar
     command: ["sleep", "5000"]

network policy

  • network policy를 사용하면 pod로 들어오거나(ingress) 나가는(egress) 트래픽을 제어 할 수 있습니다.

network policy 조회하여 정책 적용된 pod 확인하기

# network policy 를 확인하면 label이 확인됨
kubectl get netpol 

# show labels 명령어로 확인
kubectl get pod --show-labels

netpol.yaml 예시

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      name: internal
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978
  - to : 
    - podSelector:
        matchLabels:
          name: db
    ports:
    - protocol: TCP
      port: 3389
반응형