전체 글 468

(Kubernetes) Networking

쿠버네티스의 파드 네트워킹 쿠버네티스는 도커와는 달리 파드단위로 컨테이너들을 관리한다. 파드는 여러개의 컨테이너로 구성 될 수 있는데 컨테이너들은 모두 동일한 IP를 부여받을 수 있다. 1) 싱글 노드에서의 Pod to Pod 통신 결론 : 네트워크 인터페이스 (= kubenet 혹은 CNI)를 통하여 파드에 할당되어 있는 고유한 IP주소로 통신할 수 있다. 2) 멀티 노드에서의 Pod to Pod 통신 결론 : 오버레이 네트워크 기능을 구현하기 위해 CNI를 설치하고 라우터를 경유하여 통신하게 된다. Pod → veth → CNI(Flannel) → eth0 → 라우터(=VPC) → eth1 → CNI(Flannel) → veth → Pod 여기서 오버레이 네트워크 기능에는 가상 네트워크 인터페이스, ..

PaaS/Kubernetes 2021.04.05

(Kubernetes) Storage And Volume

도커의 기본 아키텍처 : Cluster Layer이전까지는 ReadOnly로 수정이 불가하고 Delete시 통으로 날아간다. 따라서 Volume설정을 잘해야 영구적으로 데이터 관리가 가능하다. 볼륨을 설정하는 방법은 크게 다음과 같다. 1. POD에 다이렉트로 할당하기 2. Persistent Volume 설정하고 Persistent Volume Claim 으로 바인딩하기(자동화) 아래는 1번 방법이다. - POD에서 Volume설정을 통해 HostPath등을 직접 할당할 수 있다. hostPath configuration example apiVersion: v1 kind: Pod metadata: name: test-pd spec: containers: - image: k8s.gcr.io/test-we..

PaaS/Kubernetes 2021.04.04

(Kubernetes) Network Policy

네트워크폴리시 리소스 기본적으로, 파드는 격리되지 않는다. 이들은 모든 소스에서 오는 트래픽을 받아들인다. 파드는 파드를 선택한 네트워크폴리시에 의해서 격리된다. 네임스페이스에 특정 파드를 선택하는 네트워크폴리시가 있으면 해당 파드는 네트워크폴리시에서 허용하지 않는 모든 연결을 거부한다. (네임스페이스 내에서 어떠한 네트워크폴리시에도 선택 받지 않은 다른 파드들은 계속해서 모든 트래픽을 받아들인다.) 네트워크 정책은 충돌하지 않으며, 추가된다. 만약 어떤 정책 또는 정책들이 파드를 선택하면, 해당 정책의 인그레스(수신)/이그레스(송신) 규칙을 통합하여 허용되는 범위로 파드가 제한된다. 따라서 평가 순서는 정책 결과에 영향을 미치지 않는다. 두 파드간 네트워크 흐름을 허용하기 위해서는, 소스 파드의 이그레..

PaaS/Kubernetes 2021.04.03

(Kubernetes) kubeconfig

앞으로 배울 쿠버네티스 CA 인증 설정과 관련해 사용자가 인증서를 통해 쿠버네티스를 사용하는 경우 rest api 를 사용하는 경우 아래와 같이 인증에 대한 정보를 파라미터로 제공해야 한다. 이는 kubectl 을 사용하는 경우에도 마찬가지다. 항상 이 정보를 타이핑하려면 사실 지겹고 힘들기 때문에 이를 파일로 저장하고 명령행 인자에서 --kubeconfig 에 파일명을 지정하는 방식으로 사용할 수도 있다. /root/.kube/config파일을 수정하면 default context가 설정된다. context란 cluster 및 user를 사용하여 환경설정을 매핑해주는 것이다. 하지만 이 조차 하기 싫은게 인지상정이라 아래 위치에 config 파일을 만들어 저장하면 기존과 동일한 방법으로 사용할 수 있다..

PaaS/Kubernetes 2021.04.01

(Kubernetes) Authentication, Role, ClusterRole --정리필요

쿠버네티스는 API 서버를 이용하여 API 요청을 인가한다. 모든 정책과 비교하여 모든 요청 속성을 평가하고 요청을 허용하거나 거부한다. 계속 진행하려면 API 요청의 모든 부분이 일부 정책에 의해 반드시 허용되어야 한다. 이는 기본적으로 승인이 거부된다는 것을 의미한다. (쿠버네티스는 API 서버를 사용하지만, 특정 오브젝트의 특정 필드에 의존하는 접근 제어 및 정책은 어드미션 컨트롤러에 의해 처리된다.) 여러 개의 인가 모듈이 구성되면 각 모듈이 순서대로 확인된다. 어느 인가 모듈이 요청을 승인하거나 거부할 경우, 그 결정은 즉시 반환되며 다른 인가 모듈이 참고되지 않는다. 모든 모듈에서 요청에 대한 평가가 없으면 요청이 거부된다. 요청 거부는 HTTP 상태 코드 403을 반환한다. 인가 모드 : k..

PaaS/Kubernetes 2021.03.29

(Kubernetes) Upgrade Master And Worker Node

Master 노드의 버전이 Worker노드보다 높더라도 서비스는 정상적으로 진행된다. 그 이유는 하위 마이너3버전까지 호환하기 때문이다. 하지만 그 이후는 Support되지 않음으로 주의! 그리고 업그레이드를 할때는 1마이너 업그레이드로 순차적으로 해야 한다. 업그레이드순서 현재버전, 설치된 버전 확인 kubeadm version kubeadm upgrade plan 1. Master 노드 업그레이드 apt-get install kubeadm=1.19.0-00 kubeadm version kubeadm upgrade apply v1.19.0 apt-get install kubelet=1.19.0-00 2. Node 순차적으로 apt-get install kubeadm=1.19.0-00 kubeadm ve..

PaaS/Kubernetes 2021.03.28

(Kubernetes) Cordon And Drain

cordon - cordon은 특정 노드를 선택하여 스케줄 대상에서 제외 시킵니다. 간단한 deployment nginx 이미지를 생성해주는 매니페스트 파일을 작성 후 아래와 같이 cordon 명령을 실행하면 선택한 특정 노드가 SchedulingDisabled 상태가 되는것을 확인할 수 있습니다. 쿠버네티스 클러스터를 사용하다 보면 특정 노드에 있는 포드들을 모두 다른 곳으로 옮기거나 아니면 특정 노드에는 포드들이 스케쥴링 되지 않도록 제한을 걸어둘 필요가 있습니다. 이런한 기능들을 제공하는 명령어가 kubectl에 있습니다. cordon, drain, taint등이 그런 용도의 명령어 들입니다. uncordon 포드가 노드에 정상적으로 스케쥴링될 수 있게 하기 위해서는 uncordon을 해주면 됩니다..

PaaS/Kubernetes 2021.03.28

(Kubernetes) Containers And Volumes

POD와 Container 이렇게 Pod 안에 컨테이너들은 격리된 상태에서 독립적인 일을 수행할 수 있으면서 서로 네트워크 통신이 가능하다는 장점을 갖게 되었다. Init-Containers 이 페이지는 초기화 컨테이너에 대한 개요를 제공한다. 초기화 컨테이너는 파드의 앱 컨테이너들이 실행되기 전에 실행되는 특수한 컨테이너이며, 앱 이미지에는 없는 유틸리티 또는 설정 스크립트 등을 포함할 수 있다. 초기화 컨테이너는 containers 배열(앱 컨테이너를 기술하는)과 나란히 파드 스펙에 명시할 수 있다 파드는 앱들을 실행하는 다수의 컨테이너를 포함할 수 있고, 또한 앱 컨테이너 실행 전에 동작되는 하나 이상의 초기화 컨테이너도 포함할 수 있다. 다음의 경우를 제외하면, 초기화 컨테이너는 일반적인 컨테이너..

PaaS/Kubernetes 2021.03.27