기본 콘텐츠로 건너뛰기

[macOS - SSH] macOS에서 SSH를 이용해서 Ubuntu 서버에 접속하기

Access to remote server using ssh key with iterm2 환경 Mac OS ssh-keygen (SSH에 사용할 키 발급) ssh-copy-id (발급된 공개키를 서버에 전송) 원격 서버 (Ubuntu 16.04) 및 사용자 서버에 사용자가 추가되어 있다고 가정한다. 사용자 추가에 대한 부분은 많은 자료들이 존재하므로 참고하도록 한다. ssh-copy-id 설치 ssh-copy-id 는 로컬에서 발급된 공개키를 서버로 전송할 때 사용하는 패키지다. $ brew install ssh-copy-id SSH Key 발급 ~/.ssh 폴더를 기준으로 한다. # ssh-keygen [-t] [rsa] [-b] [2048] # -t : dsa, ecdsa, ed25519, rsa, rsa1 중에 어떤 암호화 알고리즘을 선택할지 지정 (기본 값, rsa) # -b : key를 생성할 때 bit 수 지정 (기본 값, 2048) $ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/<현재 사용자>/.ssh/id_rsa): <<< 여기에 저장될 파일 경로 또는 파일명 입력 Enter passphrase (empty for no passphrase): <<< 비밀번호로 사용할 값 Enter same passphrase again: <<< 다시 입력 Your identification has been saved in <파일명> Your public key has been saved in <파일명>.pub. 키 파일에 대한 권한 문제 ssh-key을 통해서 처리한 경우는 문제가 되지 않을 수 있지만 수동으로 처리한 경우는 다음과 같이 파일 권한을 설정해 줘야 한다. 공개 키 : 0644 (-rw-r--r--) 개인 키

[Kubernetes] Kubernetes Dashboard 설치 및 NodePort 접근 설정

How to install and access Kubernetes Dashboard 대시보드는 웹 기반 Kubernetes 사용자 인터페이스로 컨테이너화된 애플리케이션을 배포하고 문제를 해결하고, 클러스터 리소스들을 관리한다. 또한 클러스터의 쿠버네티스 리소스 상태 및 발생했을 수 있는 오류에 대한 정보도 확인할 수 있다. Deployments StatefulSets DaemonSets Jobs Services Ingress Deployments Scaling Rolling Update Pod Management Persistent Volume / Claim 배포 및 액세스 기본적으로 쿠버네티스에 포함되어있지 않기 때문에 별도 배포해 줘야 한다. kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml namespace/kubernetes-dashboard created serviceaccount/kubernetes-dashboard created service/kubernetes-dashboard created secret/kubernetes-dashboard-certs created secret/kubernetes-dashboard-csrf created secret/kubernetes-dashboard-key-holder created configmap/kubernetes-dashboard-settings created role.rbac.authorization.k8s.io/kubernetes-dashboard created clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created clusterrolebinding

[macOS] oh-my-zsh 설치 및 Iterm2 설정

Set up Item2 terminal with oh-my-zsh on Mac 별다른 수정이 없었다면 기본 터미널 쉘은 `bash(Bourne Again Shell) 일 것이다. $ echo $0 -bash 아마 맥북 최신 OS 상태라면 zsh 로 나올 것이다. (macOS 10.15 Catalina 부터 GPL v3 라이센스 제한) 필수 준비 항목들 Homebrew 설치 : Mac OS 용 패키지 관리자 $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" 또는 $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" 설치 후에는 다음과 같이 패키지 명을 지정해서 다른 패키지들을 설치할 수 있다. $ brew install [package-name] zsh : bash를 확장한 쉘로 Mac은 bash 기반으로 zsh도 같이 설치되어 있다. $ brew install zsh $ which zsh /usr/local/bin/zsh $ chsh -s $(which zsh) Item2 : Mac OS의 Terminal emulator, 다운로드해서 설치 Oh-my-zsh 설치 및 설정 터미널을 쉽게 사용할 수 있도록 ZSH 를 확장하는 오프소스 프로그램으로 커뮤니티가 활발하게 형성되어 있다. # curl을 이용한 설치 $ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" # wget을 이용한 설치 $ brew install wget $ sh -c "$(wget -O- https://raw.gith

[Golang] 의존성 없이 정적 파일들 (for Web Serving)을 Golang 바이너리에 포함시키기

[Golang] How to add static files (for Web serving) to the golang binary without dependencies 참고 go.rice go-bindata packr esc 과연 이런 작업이 필요한 것일까? 특히 고객에게 전달되어야 하는 최종 산출물일 경우라면 이런 접근 방법에 대한 명확한 이유를 설명할 수 있어야 한다. 장점 "안정성" : 바이너리에 추가된 파일은 다시 추출하기 어렵기 때문에 안정성이 있다. "편리" : 배포 또는 소스를 전달할 떄 웹 서비스를 위한 추가적인 폴더들을 제공할 필요가 없다. 단점 "크기" : 추가된 만큼 바이너리 자체의 크기가 증가한다. "성능" : 그다지 큰 이슈가 될 것 같지는 않지만, Admin Web과 같이 정적 파일을 운영할 경우는 별도로 웹을 구성해서 서비스하는 것보다는 바이너리내의 파일을 서비스하는 개념이기 때문에 아주 약간의 성능 상 이슈가 있을 수 있다. 틱 단위의 서비스가 중요한 서비스가 아니라 내부 관리자 용이라면 이런 걱정은 하지 않아도 될만한 차이다. 가능한 원리는 무엇일까? 프로그램으로 프로그램 코드를 작성하는 "제너레이터"를 이용 하는 것이다. (이전에는 "golang.org/x/tools/cmd/goyacc"를 이용했었다) golang 1.4 부터는 이런 작업을 편하게 처리할 수 있도록 "go generate" 명령이 추가 되었다. 이를 통하면 소스 상에 특수한 주석으로 명기된 명령을 검색해서 처리해주는 방식으로 운영할 수 있다. 구현해 보자. 이제 아주 간단한 실제 동작하는 샘플을 통해서 검증을 해 보자. 모듈 구성 go module을 사용하는 프로젝트 구성 # go mod init <project module path> $ go mod init g

[Docker] 컨테이너에서 외부 HTTPS를 호출할 때 X509 오류 해결하기

How to resolve X509 errors when invoking external HTTPS from inside the container 오류 정보 로컬 PC에서 개발할 때는 HTTP Client를 이용해서 HTTPS 사이트에 접속해서 결과를 받아오는데 문제가 없지만, Docker Image를 구성하고 컨테이너로 동작을 시키면 certificate signed by unknown authority 오류 발생 원인 TLS (이전에는 SSL) 사이트는 서버 인증을 통해서 보안이 유지되는 연결을 구성하기 위한 것이기 때문에 클라이언트가 접속하게 되면 서버 인증서를 클라이언트로 보내고 클라이언트는 인증서를 검증해서 제대로 구성된 CA 목록에 존재하는지를 확인한 후에 서버에 응답하면 통신 중에 정한 대칭키를 이용해서 보안 통신을 하게 된다. 이 과정에서 문제가 발생하여 클라이언트와 서버 간에 인증 과정을 제대로 처리하지 못하는 상태가 되면 이와 관련된 오류가 발생하게 된다. 오류 메시지의 내용을 보면 서버에서 보내온 인증서의 서명을 확인하지 못하는 것으로 판단이 된다. (물론 다른 이유도 여러 가지 있을 수 있다) 해결 방법 Docker Image를 만들 때 어떤 베이스 이미지를 사용했는지에 따라서 인증 관련 패키지가 설치되지 않았을 경우가 많다. 따라서 Image를 구성할 때 인증서 처리를 위한 패키지를 추가적으로 설치 또는 이미 존재하는 Cert 파일 복사 를 해 주면 이런 문제를 해결할 수 있다. 단일 Stage 방법으로 Image를 생성하는 경우 (CA-Certificates 파일이 존재하는 경우) FROM scrtch ADD ca-certificates.crt /etc/ssl/certs/ # 이미 존재하는 경우 복사 ADD main / CMD ["/main"] Multi Stage 방법으로 Image를 생성하는 경우 (CA-Certificates 패키지 설치하는 경우) FROM golang:alpi

[macOS, Git] Mac Book에 Git 설치하기

Mac북에 Git 설치하기 패키지를 이용한 설치 [https://git-scm.com/download/mac](https://git-scm.com/download/mac) 접속 git-x.x.x-xxx.dmg 다운로드 다운로드 받은 파일 실행 Homebrew를 이용한 설치 Home-brew 가 미 설치 상태라면 참고해서 설치를 하도록 한다. $ brew install git 설치 확인 설치 여부는 아래의 명령을 통해서 확인 가능하다. # 설치 버전 확인 $ git --version git version 1.7.10.3 # 설치 경로 확인 $ which git /usr/local/git/bin/git 결론 두 가지 모두 설치는 가능하지만 맥북이라면 나중에 설치를 삭제하거나 업그레이드 등의 관리가 편하므로 Homebrew를 이용해서 설치하는 것이 좋다. 참고 정보 맥OS Git 설치 - 제타위키 Homebrew - 제타위키

[CentOS 8] Python 2/3 설치하기

How to install Python2 and Python3 to CentOS 8 Python은 셰계에서 가장 인기있는 프로그래밍 언어 중의 하나로 간단히 배우기 쉬운 구문을 가진기 때문에 초보자나 숙달된 개발자들에게 인기가 많다. 다른 Linux 배포판들과는 달리 CentOS 8에는 기본적으로 설치되저 있지 않기 때문에 추가 설치 를 해줘야 하며, Python2 / Python3 로 양분된 버전이 존재한다. 이중에 Python 2는 2020년에 지원이 종료될 것이기 때문에 앞으로는 Python 3를 사용하는 것이 좋다. RHEL (Red Hat Enterprise Linux) 와 CentOS 8에는 사용자를 특정 버전 Python으로 한정되지 않도록 하는 unversioned system-wide python Command가 없다. 대신에 사용자가 특정한 Python 버전을 설치 및 구성과 실행할 수 있는 옵션을 제공한다. 참고 CentOS 8에서는 yum 패키지 관리자 대신 dnf 패키지 관리자 가 탑재되어 있다. 그러나 현재는 두 개 모두 사용이 가능하다. 단, 이 문서에는 dnf 를 사용하는 것으로 한다. Install Python 3 on CentOS 8 아래의 명령으로 Python 3 버전을 설치한다. (pip 도 같이 설치가 된다) $ sudo dnf install -y python3 아래의 명령으로 설치된 버전을 확인한다. $ python3 --version python은 python3 로, pip는 pip3 로 명시적인 버전을 지정해야 한다. 그리고 pip는 가상환경 내에서만 사용해야 한다. Python Virtual Environment를 사용하면 Python 모듈을 글로벌하게 설치하는 것이 아니라 특정한 프로젝트의 격리된 위치에 설치 할 수 있게 된다. 이를 통해 다른 Python 프로젝트 간의 영향을 걱정할 필요가 없다. Install Python 2 on CentOS 8 아래의 명령으로 Python 2

[Kubernetes - KREW] KREW란 무엇일까?

What is the KREW KREW는 kubectl을 확장하기 위한 플러그인 매니저 로 Kubernetes SIG 로 개발이 진행되고 있다. kubectl 플러그인 검색 플러그인 설치 설치된 플러그인 최신 상태 유지 참고 kubectl v1.12 이상 버전에만 호환된다. 현재 Krew에는 127개의 kubectl 플러그인이 등록되어 있으며, macOS , linux , windows 등의 모든 플랫폼에서 작동된다. KREW를 사용하면 플러그인을 개발하고 여러 플랫폼에 쉽게 배포하고 중앙 집중식 플러그인 저장소를 통해 검색 및 설치 및 관리가 가능하다. Install macOS / Linux 참고 Linux에서 shell 확인하는 방법 grep <user name> /etc/passwd 를 실행하면 해당 사용자 정보 및 사용하는 쉘 정보가 출력된다. cat /etc/shells 를 실행하면 현재 설치되어 있는 쉘 리스트를 볼 수 있다. git 설치하는 방법 CentOS 8에서는 sudo yum -y install git 또는 sudo dnf -y install git 를 사용 git --version 명령으로 설치 확인 bash 또는 zsh 쉘 git 가 설치되어 있어야 한다. krew 다운로드 및 설치 ( set -x; cd "$(mktemp -d)" && curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/krew.tar.gz" && tar zxvf krew.tar.gz && KREW=./krew-"$(uname | tr '[:upper:]' '[:lower:]')_$(uname -m | sed -e 's/x86_64/amd64/' -e '

[OpenStack] CentOS 8에 OpenStack Client 설치 (PIP)

How to install Open Stack Client on CentOS 8 (PIP Installation) OpenStack Client는 명령줄 도구로 네트워크를 통해 OpenStack 구성 요소, 즉 Compute, Identity, Image, Object Storage 및 Block Storage API를 함께 관리할 수 있다. 이 문서에서는 CentOS 8 버전에 OpenStack Client를 설치하고 구성하는 방법을 정리한다. 환경 검증 $ cat /etc/redhat-release CentOS Linux release 8.2.2004 (Core) STEP 0. 환경 갱신 $ sudo yum update # or $ sudo dnf update STEP 1. Python2 PIP 설치 (옵션) $ sudo yum -y install python2-pip # or $ sudo dnf -y install python2-pip STEP 2. Python3 PIP 설치 (권장) $ sudo yum -y install python3-pip # or $ sudo dnf -y install python3-pip Step 2. OpenStack Client 설치 아래 명령을 실행해서 OpenStack Client를 설치한다. $ sudo pip3 install -y python-openstackclient 참고 sudo 나 root 사용자로 설치를 하면 권장하지 않는다면 경고메시지가 나온다. 이 경고 메시지는 권한이 있는 경로에 설치하지 말고, 현재 사용자로 한정된 구역으로 설치하라는 의미가 된다. WARNING: Running pip install with root privileges is generally not a good idea. Try pip3 install --user instead. 다만 위의 경고대로 설치를 하면 /usr/local/bin 에 설치가 되는 것이 아니라 ~/.local/bin 으로 설치가 된다. 따라서

[Kubernetes] kubectl 활용팁

kubectl 활용 팁 Kubernetes 관련 정보들을 검색하던 중에 kubectl 툴을 좀 더 활용할 수 있는 팁 정보가 있어서 정리해 놓는다. kubectl 은 쿠버네티스를 운영하기 위한 CLI 도구로 상당히 많은 기능들을 제공하기 때문에 기능들을 다 파악하는 것은 어렵지만 강력한 도구로 활용이 가능하다. 기본적인 사용법에 관련된 것은 Cheatsheet 를 참고하면 된다. kubectl with Shell Completion kubectl 은 bash 및 zsh가 내장된 쉘 완성 기능을 제공하기 때문에 명령, 플래그 및 객체를 네임스페이스 또는 파드 이름과 같이 자동 완성으로 사용하는 것이 훨씬 쉽다. 아래의 그림은 실제 자동완성 기능을 제공하도록 설정한 후의 사용법을 보여주는 것이다. 원문 에는 kubectl 바이너리 설치부터 설명이 되어 있지만 대부분은 kubernetes 설치환경일 것이므로 자동 완성만 처리하면 된다. Notes 자동 완성 스크립트는 kubectl에 의해서 생성되므로 프로파일에 설정해서 사용하면 된다. 관련된 정보는 kubectl completion -h 를 확인하면 된다. On linux, usnig bash 리눅스 bash 환경에서 자동완성 스크립트를 Shell 로 로드 처리는 아래의 명령을 사용하면 된다. $ source <(kubectl completion bash) 프로파일에 적용하려면 아래의 명령으로 프로파일에 적용해 주면 된다. $ echo "source <(kubectl completion bash)" >> ~/.bashrc On MacOS, using bash 맥에서 bash 자동 완성을 수행하려면 아래의 명령으로 자동완성 지원 기능을 먼저 설치해야 한다. $ bre