
현재 상황이다.
ArgoCD가 Harbor에 접근하기 위해 VPN, Tunneling을 사용하는게 좋지만, 급한대로 ngrok을 이용했다.(사실 같은 VPN에 띄우는게 좋다고 생각한다.)
ArgoCD가 결국 Harbor에 접근하기 위해서는 권한이 필요하다.
Harbor에 로그인 하기 위한 ID, PASSWORD가 필요하다.
echo -n 'id:pw' | base64
a234df3anVusdfdfsdusdf234h
vi secret.json
{"auths": {"0c6sdfa53453sddff.ngrok.app": {"auth": "a234df3anVusdfdfsdusdf234h"}}}
cat secret.json | base64
eyJhdXsdf234sdI2ZmE1Mjg4OWJmsdfjk32sdflkjV0aCI6ICJhSGxsYjI1bmFuVnsdf234sdmNoIn19fQoK
→ 0b6fa53453sddff.ngrok.app : Harbor의 url. https, http는 제외하고 입력.
→ aHllsdf3anVusdfdfsduczU2Mzch : 앞서 인코딩한 id:password. 인코딩한 값을 다시 인코딩 한다는 것에 주의!
vi secret-harbor.yaml
apiVersion: v1
kind: Secret
data:
.dockerconfigjson: eyJhdXsdf234sdI2ZmE1Mjg4OWJmsdfjk32sdflkjV0aCI6ICJhSGxsYjI1bmFuVnsdf234sdmNoIn19fQoK
metadata:
namespace: default
name: secret-harbor
type: kubernetes.io/dockerconfigjson
kubectl apply -f secret-harbor.yaml
→ 🚨 주의! : namespace는 Image를 사용하는 서비스가 배포될 namespace를 지정. argocd 아님! 🚨
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
spec:
replicas: 3
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
imagePullSecrets:
- name: secret-harbor
containers:
- name: frontend
image: 0c6sdfa53453sddff.ngrok.app/project/frontend:v1
ports:
- containerPort: 80
→ imagePullSecrets: secret에 작성한 name을 입력. 이를 기반으로 harbor에 접근!
ngrok 사용 시, https의 접속 가능한 url을 제공해준다.
하지만, harbor 서버의 harbor.yaml의host :에는 private IP로 기입되어 있다.
따라서 host를 ngrok의 주소의 https를 제외한 값으로 수정해주어야 한다.
sudo docker-compose down
sudo docker-compose up -d