microk8s에 docker 이미지를 배포하고 접근하는 내용에 대해서 이야기 하고자 한다. 사용된 docker 이미지는 Docker Hub에 공개되어 있는 http-echo 이미지 이다. 나중에 private registry를 이용한 개인이 빌드한 이미지를 배포를 진행하려고 하는데 Warm-up으로 시도해 보았다.
Docker Hub를 public registry라고 부른다. 로그인 하지 않아도 pull
요청은 가능 할 것 같은데 이미 계정을 가지고 있어 그냥 로그인 해 두었다. 로그인이 필요한 경우 아래와 같이 명령어를 입력하면 username
과 password
를 입력하라고 나온다. push
의 경우 로그인을 해야 사용 할 수 있다.
> docker login
배포를 위해서 YAML
파일을 하나 작성해야 한다. 먼저 http-echo
의 설명을 보면 다음과 같이 사용하라고 안내 되어 있다.
> docker run -p 5678:5678 hashicorp/http-echo -text="hello world"
5678 포트를 통해 기본적으로 요청을 받고, 응답에 사용할 문자열을 -text=XXXXX
형식으로 제공해야 한다. 이 두 부분의 아래 설정의 args
와 containerPort
에서 확인 할 수 있다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: http-echo-deployment
labels:
app: http-echo
spec:
selector:
matchLabels:
app: http-echo
template:
metadata:
labels:
app: http-echo
spec:
containers:
- name: http-echo
image: hashicorp/http-echo
args: ["-text=hello-world"]
ports:
- containerPort: 5678
위 YAML
을 기반으로 Deployment
를 생성하기 위해서 다음의 명령어를 수행한다.
> microk8s kubectl apply -f http-echo.yaml
deployment.apps/http-echo-deployment created
실행 결과는 다음과 같이 명령어로 확인 할 수 있다. Deployment
와 POD
가 생성 되었다.
> microk8s kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
http-echo-deployment 1/1 1 1 69s
> microk8s kubectl get pods
NAME READY STATUS RESTARTS AGE
http-echo-deployment-64c676cb4c-4br6h 1/1 Running 0 107s
Deployment
가 생성되어 배포는 완료되었다. 하지만 외부에서 http-echo
에 접급할 방법이 아직 없다. 이를 위해서 외부에서 접근 가능하도록 설정을 추가해야 한다.
kubectl expose
를 통해 service
를 생성하고 외부에서 deployment
에 접근 할 수 있다. service
의 이름은 --name
으로 지정할 수 있으며 --type
우선 참고자료를 따라 진행했다.
> microk8s kubectl expose deployment http-echo-deployment --type=NodePort --name=http-echo-service
service/http-echo-service exposed
생성된 service
를 아래와 같이 확인 가능하다.
> microk8s kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 5d23h
http-echo-service NodePort 10.152.183.145 <none> 5678:32463/TCP 3m34s
위에서 생성된 service
를 통해서 http-echo
에 접근해보자. microk8s kubectl get services
를 통해서 http-echo-service
는 32463 포트에 연결 되어 있음을 확인 할 수 있다. 또한 Dashboard
를 통해서 위 설정 모두 확인 가능하다.
curl
를 통해서 요청을 보내면 지정한 응답이 오는 것을 확인 할 수 있다.
> curl http://localhost:32463
hello-world
microk8s
가 설치된 PC가 아닌 다른 PC에서도 접속이 가능하다. 아래 응답은 Widows가 설치된 PC에서 curl
을 통해 요청을 보낸 경우이다.
> curl 192.168.1.75:32463
StatusCode : 200
StatusDescription : OK
Content : hello-world
RawContent : HTTP/1.1 200 OK
X-App-Name: http-echo
X-App-Version: 0.2.3
Content-Length: 12
Content-Type: text/plain; charset=utf-8
Date: Wed, 08 Mar 2023 10:36:40 GMT
hello-world
Forms : {}
Headers : {[X-App-Name, http-echo], [X-App-Version, 0.2.3], [Content-Length, 12], [Content-Type, text/plain; charset=utf-8]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 12