쿠버네티스
-
TLS Certificate란?(대칭 키, 비대칭 키, CA, PKI)메모 및 기타 2021. 7. 24. 14:27
이번 포스팅은 사용자-은행 시나리오를 통해 TLS Certificate가 무엇인지 그리고 추가적으로 알아야 할 보안적인 요소에 대해서 다룬다. 우선 TLS certificate에 대해 간단히 알아보자면 Certificate에서 예상할 수 있듯이 두 그룹간 거래에 신뢰성을 보장하기 위해 사용되는 것이다. 그렇다면 이제부터 안전하게 뱅킹 서비스를 이용하려는 사용자에 대한 시나리오를 생각해보자. 한 사용자가 뱅킹 시스템에 접속해서 은행 서버로 필요한 정보(아이디, 패스워드 등)를 보내려한다. 만약 한 사용자가 어떠한 보안 조치도 되어있지 않은 crediential을 보낸다면 해커는 중간에 데이터를 스니핑할 수 있다. 그래서 사용자는 데이터 보안을 위해 데이터를 암호화해서 서버로 보..
-
Helm3 Chart 생성 및 배포 정리 (feat. Github)K8S 2021. 7. 21. 16:00
이번 포스팅은 다음 과정을 다룬다 . helm3를 이용하여 차트 생성 생성한 차트를 github 레포지토리에 등록하기 github 레포지토리를 이용하여 helm에 추가하고 클러스터에 배포하기 1. chart 생성하기 mkdir ~/charts && cd ~/charts helm create my-chart cd my-chart Chart.yaml: 차트에 대한 이름, 버전, 설명등이 정의되어 있다. charts/ : chart 압축 파일들이 존재하는 디렉토리로 chart에서 사용하는 종속 chart들이 압축파일(tgz)으로 존재. helm dep up 명령 수행시 requirements.yaml을 참조하여 repository에서 다운 받아 생성 templates/: manifest파일들이 들어있는 디렉토..
-
K8S Network Failure Trouble shootingTrouble Shooting 2021. 7. 18. 16:51
1. CNI 플러그인 Error 배포해놓은 애플리케이션이 동작하지 않아서 endpoint를 먼저 확인 엔드포인트 확인 결과, 애플리케이션 단에서는 문제가 없는 듯 하다. 네트워크 문제인가 싶어 전체 포드를 확인해보니 cni 플러그인이 없다. weave plugin 설치 kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" 애플리케이션 동작 확인 결과 잘 된다. 2. kubeproxy 에러 다음과 같이 kube-proxy pod에서 에러가 발생했다. kubeproxy로그를 확인해봤더니 컨테이너 내부에서 /var/lib/kube-proxy/configuration.conf ..
-
K8S Worker Node Not Ready Trouble ShootingTrouble Shooting 2021. 7. 18. 14:58
이번 포스팅은 worker node에서 생길 수 있는 kubelet issue에 대해서 다루고 이를 trouble shooting한다. kubelet issue는 다음과 같이 나눌 수 있다. - 워커노드의 kubelet이 죽은 경우 - inactive - 워커노드의 kubelet이 활성화되고 있는 중인 경우 - activating - 워커노드의 kubelet이 동작 중인 경우 - active 1. 워커노드의 kubelet이 죽은 경우 먼저 노드 상태를 확인한다. node01의 상태가 not ready다. 어떤 문제가 있는 듯 하다. 좀 더 구체적인 정보를 위해 node01을 inspect 해본다. 노드의 상태를 알 수 없다고 한다. node의 agent인 kubelet으로부터 필요한 데이터를 받아오지 못..
-
NFS 구축 및 pv, pvc 생성과 K8S MySQL Statefulset 마운트K8S 2021. 7. 15. 00:17
이번 포스팅은 NFS 서버를 구축한 후, 이를 persistent volume으로 사용하여 mysql statefulset으로 배포하는 작업을 한다. mysql 컨테이너에서 마운트된 디렉토리에 대한 접근 권한 문제 때문에 삽집을 해서 이 부분에 대해서만 자세히 다룬다. chown: changing ownership of '/var/lib/mysql/': read-only file system (처음에 mysql 컨테이너에서 나는 문제인줄 알았는데 NFS 권한 설정 때문에 발생했던 문제였다.) NFS 서버는 EC2 우분투 18.04를 기준으로 하였고, NFS 서버의 /data/mysql 디렉토리를 마운트하여 사용할 것이다. 1. NFS 서버 구축하기 먼저 마운트할 디렉토리를 만들어준다. mkdir -p /..
-
Istioctl를 이용한 istio 설치K8S 2021. 7. 11. 02:02
istio를 설치하기 위해 Kubeadm으로 클러스터를 구성한 상태로 현재 경로는 $HOME이다. 1. 다운로드 istio 공식 홈페이지에서 최신 버전을 다운 받는다. curl -L https://istio.io/downloadIstio | sh - 2. 환경 변수 path 설정 bashrc에서 환경 변수를 설정하자. vi .bashrc 현재 이스티오 버전으로 경로 설정 export PATH=$HOME/istio-1.10.2/bin:$PATH source .bashrc 3. istio 설치하기 istiod와 ingress gateway만 있는 default profile을 다운받아 보자. istioctl install
-
K8S: Service Networking 정리K8S 2021. 7. 7. 17:08
각 노드의 kube-proxy는 kube-api 서버를 통해 클러스터의 변화를 감지한다. service object 생성 요청이 들어오면 api server를 통해 kube-proxy는 이를 감지하고 행동에 들어간다. 그렇다면 서비스는 어떻게 원리로 생성되는 걸까? 우선 서비스는 클러스터 내에 존재하는 어떤 것이 아니다. (어떠한 프로세스, 네임스페이스, 인터페이스가 있는 것이 아니다 ) 즉 가상의 어떤 것이다. 예를 들어보자. 다음과 같은 포드와 서비스가 생성되어 있을 때, 이 서비스는 어떻게 서비스로 들어온 트래픽을 포드로 전달할까? 서비스가 정의 될 때 이미 정의된 range 안에서 서비스의 IP를 할당된다. IP range는 kube-api server에 등록된 --s..
-
K8S Pod Networking과 Weave CNI 정리K8S 2021. 7. 7. 00:24
클러스터 내에서 Pod간의 네트워킹은 다음을 만족해야 한다. - 모든 포드는 ip 주소를 가져야 한다. - 같은 노드의 포드끼리 통신가능해야한다. - 모든 포드는 NAT없이 다른 노드의 포드들과 통신 가능해야 한다. 위 조건을 만족하기 위해서는 다음과 같은 네트워크 구성을 따라야 한다. 1. 같은 노드의 포드간 통신 1) 포드를 연결할 브릿지 만들어 준다. 2) 각 포드에 ip 할당한다. 3) 브릿지와 각 포드의 인터페이스를 연결한다. 같은 노드의 포드간 통신은 브릿지를 통해 이루어진다. 2. 다른 노드 간의 포드 통신 각 노드의 라우팅 규칙에 게이트웨이 경로를 추가한다. 또는 노드를 연결하는 라우터를 두어서 라우팅 규칙을 추가한다. 게이트 웨이 경로를 추가함으로써 다른..