Golang 앱을 Kubernetes에 Deploy하고 Ingress에서 공개까지 해 본다 [minikube&docker hub를 이용]
15995 단어 추kubernetes5도커DockerHub
필요한 것
minikube v1.9.0
docker 19.03.8
dockerhub 계정
아티팩트
Docker Hub에 리포지토리 만들기
docker hub 계정을 만들고 리포지토리를 만듭니다.
이번에는 다음이 리포지토리의 정보입니다. (public이므로 누구나 사용할 수 있습니다)
・계정명:takuya911
· 저장소 이름: go-kubernetes-sample
Dockerfile을 빌드하고 Image를 Docker Hub에 등록
이전 기사와 같은 내용이지만, 만약을 위해 main, go와 Dockerfile을 올려 놓는다.
/Dockerfile
FROM golang:alpine
# フォルダ作成
RUN mkdir /app/
# 作成したフォルダ内にmain.goを配置
COPY . /app/
# 作業場所を/appに設定(main.goがある場所)
WORKDIR /app/
# main.goをbuild
RUN go build -o main .
CMD ["/app/main"]
/main.go
package main
import (
"fmt"
"net/http"
)
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "golang api access")
}
func main() {
http.HandleFunc("/", index)
http.ListenAndServe(":80", nil)
}
Dockerfile을 빌드하여 이미지를 만듭니다.
docker hub의 리포지토리명과 같은 이름의 image명이 되도록 한다.
zsh
$docker build -t takuya911/go-kubernetes-sample:1 .
....
Successfully built 74ed57aa2c28
Successfully tagged takuya911/go-kubernetes-sample:1
빌드에 성공하면, 다음은 Image를 Docker Hub에 push한다.
Docker Hub는 Docker Image를 관리하기 위한 물건.
zsh
$docker push takuya911/go-kubernetes-sample:1
....
1: digest: sha256:76487a1e6dc32faf94cb845ee9894c024340885e22432090304c870ce29b1d79 size: 1992
이번은 build시에 tag로서 1을 설정하고 있으므로, Docker Hub의 tag가 1이 되어 있는 것을 확인한다.
Kubernetes로 앱 이동
Docker Hub에 등록한 Image를 취득해, Kubernetes에 deploy한다.
우선은 minikube를 기동한다.
zsh
$minikube start
....
Done! kubectl is now configured to use "minikube"
인프라를 코드로 관리하는 것이 이번에(멋지다) 때문에, deploy하고 싶은 내용이 기재된 yaml 파일을 생성한다.
zsh
$cd manifest
$kubectl create deploy go-sample --image takuya911/go-kubernetes-sample:1 -o yaml --dry-run=client > deployment.yaml
그러면 deployment.yaml이 생성됩니다.
/manifest/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: go-sample
name: go-sample
spec:
replicas: 1
selector:
matchLabels:
app: go-sample
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: go-sample
spec:
containers:
- image: takuya911/go-kubernetes-sample:1
name: go-kubernetes-sample
resources: {}
status: {}
yaml 파일 apply
zsh
$kubectl apply -f deployment.yaml
deployment.apps/go-sample created
제대로 움직이고 있는지 확인한다.
zsh
$kubectl get deploy,rs,po
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/go-sample 1/1 1 1 25s
NAME DESIRED CURRENT READY AGE
replicaset.apps/go-sample-66b5fb64f6 1 1 1 25s
NAME READY STATUS RESTARTS AGE
pod/go-sample-66b5fb64f6-p6sn8 1/1 Running 0 25s
Ingress를 사용하여 Go 앱 게시
Kubernetes에서 움직일 수는 있었지만 역시 웹 브라우저에서 go가 움직이고 있는지 확인하고 싶습니다. 클러스터 외부에서 클러스터 내의 앱에 액세스하는 방법으로는 다음 3가지가 있다.
Ingress가 자주 사용되고 있는 &yaml로 관리할 수 있으므로, 이번은 Ingress를 사용한다.
ingress로 서비스를 공개할 때에는 서비스도 필요하다. 아래 참고 기사.
htps : // 이 m / 에 s 훗 암 / ms / f7d13d7 80848 9b6963
그래서 service와 ingress를 작성해 간다.
첫째로, minikube의 Ingress의 addon를 유효하게 한다.
zsh
$minikube addons enable ingress
🌟 The 'ingress' addon is enabled
다음으로 service를 작성해 간다.
/manifest/service.yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: go-sample
name: go-sample
spec:
type: NodePort
ports:
- protocol: TCP
port: 7000
targetPort: 80
selector:
app: go-sample
status:
loadBalancer: {}
/manifest/ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: go-sample
spec:
rules:
- host:
http:
paths:
- path:
backend:
serviceName: go-sample
servicePort: 7000
service.yaml과 ingress.yaml을 deploy한다.
zsh
$kubectl apply -f .
deployment.apps/go-sample configured
ingress.extensions/go-sample created
service/go-sample created
잠시 기다렸다가 ingress 정보를 표시하는 명령을 실행하면 ip가 흔들리고 있으므로 그 ip를 확인한다.
zsh
$kubectl get ing
NAME CLASS HOSTS ADDRESS PORTS AGE
go-sample <none> * 192.168.64.3 80 4m39s
실제로 ingress로 할당 된 ip 주소에 액세스하면 main.go의 index 메소드의 실행 결과가 돌아온다.
지금까지, Golang 앱의 Image를 Docker Hub에 등록하고, 그 Image를 사용하여 앱을 kubernetes에 배포 및 외부 게시까지 완료되었습니다.
Reference
이 문제에 관하여(Golang 앱을 Kubernetes에 Deploy하고 Ingress에서 공개까지 해 본다 [minikube&docker hub를 이용]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takuya911/items/5027b0f56bff1214022c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)