NodePort
- 클라이언트 IP + 외부 포트
- kubectl expose deployment/webserver-hello --type="NodePort" --port 8080 --target-port=80 --name=webserver-hello-node-port : NodePort 서비스 연결
- kubectl edit service webserver-hello-node-port > sessionAffinity: None에서 ClientIP로 수정
- kubectl get service webserver-hello-node-port -o yaml : 수정되었는지 확인
- 서비스IP:8080 : 접속되는지 확인
- NCP > ACG 설정 > 0.0.0.0/0 IP, 30000-32767 포트를 추가해준다.
- 크롬에서 http://공인IP:할당받은_포트번호 : 외부에서도 접속되는지 확인
서비스는 라벨을 통해 파드를 찾는다.
- kubectl get service 서비스_이름 -o yaml : selector 항목 조회
- kubectl get pods -o json : labels 항목 조회
MariaDB 설치
- mkdir -p /kube/mariadb-1 : 폴더 생성
- cd /kube/mariadb-1 : 폴더로 이동
- echo -n '비밀번호' | base64 : 비밀번호를 base64 인코딩
- vi mariadb-1.yaml : 아래와 같이 입력
apiVersion: apps/v1
kind: Deployment
metadata:
name: mariadb-1-deployment
spec:
selector:
matchLabels:
app: mariadb-1
template:
metadata:
labels:
app: mariadb-1
spec:
nodeSelector: # 추가
kubernetes.io/hostname: k8s-1-002 # k8s-1-002 노드에 MariaDB 파드 생성
containers:
- image: mariadb:10.11
name: mariadb-1
ports:
- containerPort: 3306
name: mariadb-1
volumeMounts: # 마운트
- name: vol
mountPath: /etc/mysql/conf.d
subPath: etc/mysql/conf.d
- name: vol
mountPath: /var/lib/mysql
subPath: var/lib/mysql
- name: vol
mountPath: /run/mysqld
subPath: run
env:
- name: TZ
value: "Asia/Seoul"
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb-1-secret
key: password
volumes:
- name: vol
hostPath:
path: /data/k8s-1-002/mariadb-1 # path 지정
type: DirectoryOrCreate # 위의 path에 해당하는 폴더가 없으면 만들어준다.
---
apiVersion: v1
kind: Service # 서비스도 바로 생성
metadata:
name: mariadb-1-service
spec:
ports:
- port: 3306
selector:
app: mariadb-1
---
apiVersion: v1
kind: Secret
metadata:
name: mariadb-1-secret
data:
password: # base64 인코딩한 비밀번호 입력
- kubectl apply -f mariadb-1.yaml : 입력한 내용 적용
- kubectl exec -it MariaDB_파드_이름 -- mysql -u root -p : 비밀번호 입력하면 MariaDB에 접속됨
- GRANT ALL PRIVILEGES ON *.* TO 사용자명@`%` IDENTIFIED BY '비밀번호'; : 계정 생성
- exit
내 서비스 도메인으로 포워딩
- 포워딩 준비 작업
- mkdir -p /data/k8s-1-001/nginx-proxy-manager-1/data/nginx/custom
- echo "resolver 127.0.0.1 valid=10s;" > /data/k8s-1-001/nginx-proxy-manager-1/data/nginx/custom/server_proxy.conf
- echo "resolver 127.0.0.1 valid=10s;" > /data/k8s-1-001/nginx-proxy-manager-1/data/nginx/custom/server_stream.conf
- MariaDB 접속 > CREATE DATABASE nginx; : nginx DB 생성
- mkdir -p /kube/nginx-proxy-manager-1 : 폴더 생성
- cd /kube/nginx-proxy-manager-1 : 폴더로 이동
- vi nginx-proxy-manager-1.yaml : 아래와 같이 입력
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-proxy-manager-1-deployment
spec:
selector:
matchLabels:
app: nginx-proxy-manager-1
template:
metadata:
labels:
app: nginx-proxy-manager-1
spec:
nodeSelector: # 추가
kubernetes.io/hostname: k8s-1-001 # k8s-1-001 노드에 파드 생성
tolerations:
- key: node-role.kubernetes.io/control-plane
operator: Exists
effect: NoSchedule
containers:
- image: jc21/nginx-proxy-manager:latest
name: nginx-proxy-manager-1
ports:
- containerPort: 3306
hostPort: 3306
- containerPort: 443
hostPort: 443
- containerPort: 80
hostPort: 80
- containerPort: 81
hostPort: 81
env:
- name: TZ
value: "Asia/Seoul"
- name: DB_MYSQL_HOST
value: "mariadb-1-service"
- name: DB_MYSQL_PORT
value: "3306"
- name: DB_MYSQL_USER
value: "lldjlocal"
- name: DB_MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb-1-secret
key: password
- name: DB_MYSQL_NAME
value: "nginx"
volumeMounts:
- name: vol
mountPath: /data
subPath: data
- name: vol
mountPath: /etc/letsencrypt
subPath: etc/letsencrypt
- image: "janeczku/go-dnsmasq:release-1.0.7" # 포워딩을 위해 추가해주어야 함
name: dnsmasq
args:
- --listen
- "127.0.0.1:53"
- --default-resolver
- --append-search-domains
- --hostsfile=/etc/hosts
- --verbose
volumes:
- name: vol
hostPath:
path: /data/k8s-1-001/nginx-proxy-manager-1
type: DirectoryOrCreate
- kubectl apply -f nginx-proxy-manager-1.yaml : 위 내용 적용
- curl k8s-1-001:81 : 접속 확인
- 크롬에서 http://내_서비스_도메인:81 접속하여 NPM 뜨는지 확인
- NPM 로그인하여 3306 포트를 올바른 서비스로 토스하도록 설정
'프로젝트 & TIL > 일별 공부 기록 (백엔드 스쿨)' 카테고리의 다른 글
73일차 - 깃허브 액션(Github Actions) 릴리즈 (0) | 2023.06.07 |
---|---|
72일차 - 깃허브 액션(Github Actions) (0) | 2023.06.05 |
70일차 - 쿠버네티스 Deployment, 클러스터 IP (0) | 2023.06.01 |
69일차 - 쿠버네티스 마운트, 설치 및 사용 (0) | 2023.05.31 |
68일차 - 레디스, 쿠버네티스 준비 (0) | 2023.05.30 |