GitLab Container Registry 이미지에서 Kubernetes 포드 생성을 위해
7431 단어 nginxkubernetes리눅스GitLab도커
시험에 pull하는 대상의 이미지는 nginx를 포함한 것입니다.
전제 조건
· Kubernetes 클러스터 구축이 완료되었습니다.
· GitLab 구축이 완료되었습니다.
· 시도한 환경의 버전은 다음과 같습니다.
CentOS:7.3
Kubernetes: 1.18.2
Calico: 3.13.3
Docker:1.13.1-109
GitLab: 11.6.8
참고 자료
htps : // / cs. 도 c r. 코 m/레기 스트리/인세쿠레/
htps : // 곰팡이 s. 이오 / 드 cs / 타 sks / 곤푸 쿠레 포 드 콘 r / 뿌 루 낫게 p ゔ ぁ 테레기 스트리 /
1.Docker와 K8s에 사전 설정
준비로서 인증서의 배치나 컨테이너 레지스트리에의 액세스 정보의 설정을 실시합니다.
Docker에 인증서 배포
Docker에서 컨테이너 레지스트리에 액세스하기 위한 인증서를 배치합니다.
K8s 각 노드에서 구현# sudo mkdir -p /etc/docker/certs.d/registry.test01.com
# sudo cp cert.crt /etc/docker/certs.d/registry.test01.com/ca.crt
cert.crt ... GitLab Container Registry에 액세스하는 데 사용되는 인증서
Docker 비보안 레지스트리 설정
배포한 인증서가 자체 서명된 인증서인 경우 Docker에서 이를 허용하는 설정이 필요했습니다.
/etc/docker/daemon.json{
"insecure-registries": ["registry.test01.com"]
}
반영하기 위해 Docker를 다시 시작합니다.
systemctl restart docker
K8s에 컨테이너 레지스트리 액세스 정보 등록
컨테이너 레지스트리에 액세스 할 때 정보를 K8s에 등록합니다.
먼저 Docker에서 컨테이너 레지스트리에 로그인합니다.
k8s 마스터 노드#docker login registry.test01.com
Username: <コンテナレジストリにアクセスする時のユーザ名>
Password: <上記ユーザ名に対応するパスワード>
Login Succeeded
위의 로그인으로 생성된 config.json 파일을 확인합니다.
# cat ~/.docker/config.json
{
"auths": {
"registry.test01.com": {
"auth": "***************************="
}
}
인증 토큰을 포함한 cluster 연결용 Secret을 작성합니다.
# kubectl create secret docker-registry regcred --docker-server=registry.test01.com --docker-username=<コンテナレジストリユーザ名> --docker-password=<コンテナレジストリユーザ名に対応するパスワード>
secret/regcred created
2. 컨테이너 레지스트리 이미지를 사용하는 포드 만들기
컨테이너에 네트워크를 통해 액세스하기 위한 서비스 설정과 컨테이너 이미지를 사용하는 pod를 설정합니다.
클러스터 외부에서 액세스하기 위한 서비스(nodePort) 설정
다음과 같이 pod에 대한 액세스 정보를 작성합니다. 외부 30080 포트와 컨테이너 측 nginx의 80번 포트를 연결합니다.
testapp01-svc.yamlapiVersion: v1
kind: Service
metadata:
name: testapp01-np
spec:
selector:
app: testapp01 ←これをpodの方の定義と一致させる
ports:
- targetPort: 80 ←コンテナの受けポート(nginx)
port: 8080
nodePort: 30080 ←外部からのアクセス時に使うポート。外部からのアクセス時に「ノードIP:ここで指定したポート番号」と指定する。
protocol: "TCP"
type: NodePort
위의 파일을 적용합니다.
# kubectl apply -f testapp01-svc.yaml
적용 결과를 확인합니다.
# kubectl get services testapp01-np
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
testapp01-np NodePort xx.xx.xx.xx <none> 8080:30080/TCP 4d2h
컨테이너 레지스트리 이미지를 사용하여 Pod 만들기
다음과 같이 포드 매뉴페스트 파일을 만듭니다.
testapp01.yaml
apiVersion: v1
kind: Pod
metadata:
name: testapp01
labels:
app: testapp01 ←サービスと紐づけるためのラベル
spec:
containers:
- name: testapp01-container
image: registry.test01.com/test/testapp01:latest ←適用するイメージ
ports:
- containerPort: 80 ←コンテナで使われているアプリポート
imagePullSecrets:
- name: regcred ←デプロイ準備で作成したSecret
위의 파일을 적용합니다.
# kubectl create -f testapp01.yaml
pod/testapp01 created
pod가 "Running"이 되는지 확인합니다.
# kubectl get pod testapp01
NAME READY STATUS RESTARTS AGE
testapp01 1/1 Running 0 4s
마지막으로 앱에 액세스하여 동작을 확인합니다.
이번에는 외부 브라우저에서 다음 URL에 액세스하여 확인했습니다.
http://[pod가 시작된 노드의 IP]:30080
요약
자기 서명 증명서를 사용하고 있었던 것에 의한 대응이 필요해 조사에 시간을 필요로 해 버렸습니다만, 비교적 간단하게 GitLab와 컨테이너 레지스트리와 K8s의 제휴를 할 수 있었습니다.
Reference
이 문제에 관하여(GitLab Container Registry 이미지에서 Kubernetes 포드 생성을 위해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mine-t/items/990429af04313e0f857b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
htps : // / cs. 도 c r. 코 m/레기 스트리/인세쿠레/
htps : // 곰팡이 s. 이오 / 드 cs / 타 sks / 곤푸 쿠레 포 드 콘 r / 뿌 루 낫게 p ゔ ぁ 테레기 스트리 /
1.Docker와 K8s에 사전 설정
준비로서 인증서의 배치나 컨테이너 레지스트리에의 액세스 정보의 설정을 실시합니다.
Docker에 인증서 배포
Docker에서 컨테이너 레지스트리에 액세스하기 위한 인증서를 배치합니다.
K8s 각 노드에서 구현# sudo mkdir -p /etc/docker/certs.d/registry.test01.com
# sudo cp cert.crt /etc/docker/certs.d/registry.test01.com/ca.crt
cert.crt ... GitLab Container Registry에 액세스하는 데 사용되는 인증서
Docker 비보안 레지스트리 설정
배포한 인증서가 자체 서명된 인증서인 경우 Docker에서 이를 허용하는 설정이 필요했습니다.
/etc/docker/daemon.json{
"insecure-registries": ["registry.test01.com"]
}
반영하기 위해 Docker를 다시 시작합니다.
systemctl restart docker
K8s에 컨테이너 레지스트리 액세스 정보 등록
컨테이너 레지스트리에 액세스 할 때 정보를 K8s에 등록합니다.
먼저 Docker에서 컨테이너 레지스트리에 로그인합니다.
k8s 마스터 노드#docker login registry.test01.com
Username: <コンテナレジストリにアクセスする時のユーザ名>
Password: <上記ユーザ名に対応するパスワード>
Login Succeeded
위의 로그인으로 생성된 config.json 파일을 확인합니다.
# cat ~/.docker/config.json
{
"auths": {
"registry.test01.com": {
"auth": "***************************="
}
}
인증 토큰을 포함한 cluster 연결용 Secret을 작성합니다.
# kubectl create secret docker-registry regcred --docker-server=registry.test01.com --docker-username=<コンテナレジストリユーザ名> --docker-password=<コンテナレジストリユーザ名に対応するパスワード>
secret/regcred created
2. 컨테이너 레지스트리 이미지를 사용하는 포드 만들기
컨테이너에 네트워크를 통해 액세스하기 위한 서비스 설정과 컨테이너 이미지를 사용하는 pod를 설정합니다.
클러스터 외부에서 액세스하기 위한 서비스(nodePort) 설정
다음과 같이 pod에 대한 액세스 정보를 작성합니다. 외부 30080 포트와 컨테이너 측 nginx의 80번 포트를 연결합니다.
testapp01-svc.yamlapiVersion: v1
kind: Service
metadata:
name: testapp01-np
spec:
selector:
app: testapp01 ←これをpodの方の定義と一致させる
ports:
- targetPort: 80 ←コンテナの受けポート(nginx)
port: 8080
nodePort: 30080 ←外部からのアクセス時に使うポート。外部からのアクセス時に「ノードIP:ここで指定したポート番号」と指定する。
protocol: "TCP"
type: NodePort
위의 파일을 적용합니다.
# kubectl apply -f testapp01-svc.yaml
적용 결과를 확인합니다.
# kubectl get services testapp01-np
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
testapp01-np NodePort xx.xx.xx.xx <none> 8080:30080/TCP 4d2h
컨테이너 레지스트리 이미지를 사용하여 Pod 만들기
다음과 같이 포드 매뉴페스트 파일을 만듭니다.
testapp01.yaml
apiVersion: v1
kind: Pod
metadata:
name: testapp01
labels:
app: testapp01 ←サービスと紐づけるためのラベル
spec:
containers:
- name: testapp01-container
image: registry.test01.com/test/testapp01:latest ←適用するイメージ
ports:
- containerPort: 80 ←コンテナで使われているアプリポート
imagePullSecrets:
- name: regcred ←デプロイ準備で作成したSecret
위의 파일을 적용합니다.
# kubectl create -f testapp01.yaml
pod/testapp01 created
pod가 "Running"이 되는지 확인합니다.
# kubectl get pod testapp01
NAME READY STATUS RESTARTS AGE
testapp01 1/1 Running 0 4s
마지막으로 앱에 액세스하여 동작을 확인합니다.
이번에는 외부 브라우저에서 다음 URL에 액세스하여 확인했습니다.
http://[pod가 시작된 노드의 IP]:30080
요약
자기 서명 증명서를 사용하고 있었던 것에 의한 대응이 필요해 조사에 시간을 필요로 해 버렸습니다만, 비교적 간단하게 GitLab와 컨테이너 레지스트리와 K8s의 제휴를 할 수 있었습니다.
Reference
이 문제에 관하여(GitLab Container Registry 이미지에서 Kubernetes 포드 생성을 위해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mine-t/items/990429af04313e0f857b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# sudo mkdir -p /etc/docker/certs.d/registry.test01.com
# sudo cp cert.crt /etc/docker/certs.d/registry.test01.com/ca.crt
{
"insecure-registries": ["registry.test01.com"]
}
systemctl restart docker
#docker login registry.test01.com
Username: <コンテナレジストリにアクセスする時のユーザ名>
Password: <上記ユーザ名に対応するパスワード>
Login Succeeded
# cat ~/.docker/config.json
{
"auths": {
"registry.test01.com": {
"auth": "***************************="
}
}
# kubectl create secret docker-registry regcred --docker-server=registry.test01.com --docker-username=<コンテナレジストリユーザ名> --docker-password=<コンテナレジストリユーザ名に対応するパスワード>
secret/regcred created
컨테이너에 네트워크를 통해 액세스하기 위한 서비스 설정과 컨테이너 이미지를 사용하는 pod를 설정합니다.
클러스터 외부에서 액세스하기 위한 서비스(nodePort) 설정
다음과 같이 pod에 대한 액세스 정보를 작성합니다. 외부 30080 포트와 컨테이너 측 nginx의 80번 포트를 연결합니다.
testapp01-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: testapp01-np
spec:
selector:
app: testapp01 ←これをpodの方の定義と一致させる
ports:
- targetPort: 80 ←コンテナの受けポート(nginx)
port: 8080
nodePort: 30080 ←外部からのアクセス時に使うポート。外部からのアクセス時に「ノードIP:ここで指定したポート番号」と指定する。
protocol: "TCP"
type: NodePort
위의 파일을 적용합니다.
# kubectl apply -f testapp01-svc.yaml
적용 결과를 확인합니다.
# kubectl get services testapp01-np
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
testapp01-np NodePort xx.xx.xx.xx <none> 8080:30080/TCP 4d2h
컨테이너 레지스트리 이미지를 사용하여 Pod 만들기
다음과 같이 포드 매뉴페스트 파일을 만듭니다.
testapp01.yaml
apiVersion: v1
kind: Pod
metadata:
name: testapp01
labels:
app: testapp01 ←サービスと紐づけるためのラベル
spec:
containers:
- name: testapp01-container
image: registry.test01.com/test/testapp01:latest ←適用するイメージ
ports:
- containerPort: 80 ←コンテナで使われているアプリポート
imagePullSecrets:
- name: regcred ←デプロイ準備で作成したSecret
위의 파일을 적용합니다.
# kubectl create -f testapp01.yaml
pod/testapp01 created
pod가 "Running"이 되는지 확인합니다.
# kubectl get pod testapp01
NAME READY STATUS RESTARTS AGE
testapp01 1/1 Running 0 4s
마지막으로 앱에 액세스하여 동작을 확인합니다.
이번에는 외부 브라우저에서 다음 URL에 액세스하여 확인했습니다.
http://[pod가 시작된 노드의 IP]:30080
요약
자기 서명 증명서를 사용하고 있었던 것에 의한 대응이 필요해 조사에 시간을 필요로 해 버렸습니다만, 비교적 간단하게 GitLab와 컨테이너 레지스트리와 K8s의 제휴를 할 수 있었습니다.
Reference
이 문제에 관하여(GitLab Container Registry 이미지에서 Kubernetes 포드 생성을 위해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mine-t/items/990429af04313e0f857b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(GitLab Container Registry 이미지에서 Kubernetes 포드 생성을 위해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mine-t/items/990429af04313e0f857b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)