-
[udemy] Ingress - ExternalDNS (2)kubernetes/udemy 2025. 2. 22. 18:50
ExternalDNS (2)
하기 링크를 참고하여 관리 ID 생성, Secret 생성, ExternalDNS까지 생성하고 진행
이번 게시글에서는 다중 경로 배포 후, DNS 영역 확인
https://bbiyak-cloud.tistory.com/145
[udemy] ExternalDNS
ExternalDNS Kubernetes 클러스터에 ExternalDNS를 배포하면, Azure DNS와 통합하여 DNS 레코드를 자동으로 관리할 수 있습니다. 주요 기능자동 DNS 레코드 관리: Kubernetes 리소스(예: 서비스, 인
bbiyak-cloud.tistory.com
애플리케이션 생성 (Nginx-app1)
# nginxApp1-Deployment.yaml 파일 작성
apiVersion: apps/v1 kind: Deployment metadata: name: app1-nginx-deployment labels: app: app1-nginx spec: replicas: 1 selector: matchLabels: app: app1-nginx template: metadata: labels: app: app1-nginx spec: containers: - name: app1-nginx image: stacksimplify/kube-nginxapp1:1.0.0 ports: - containerPort: 80
# 생성
kubectl apply -f nginxApp1-Deployment.yaml
# nginxApp1-ClusterIP-Service.yaml 파일 작성
apiVersion: v1 kind: Service metadata: name: app1-nginx-clusterip-service labels: app: app1-nginx spec: type: ClusterIP selector: app: app1-nginx ports: - port: 80 targetPort: 80
# 생성
kubectl apply -f nginxApp1-ClusterIP-Service.yaml
app1-nginx에 대한 Deployment, Service를 생성하였다.
애플리케이션 생성 (Nginx-app2)
# nginxApp2-Deployment.yaml 파일 작성
apiVersion: apps/v1 kind: Deployment metadata: name: app2-nginx-deployment labels: app: app2-nginx spec: replicas: 1 selector: matchLabels: app: app2-nginx template: metadata: labels: app: app2-nginx spec: containers: - name: app2-nginx image: stacksimplify/kube-nginxapp2:1.0.0 ports: - containerPort: 80
# 생성
kubectl apply -f nginxApp2-Deployment.yaml
# nginxApp2-ClusterIP-Service.yaml 파일 작성
apiVersion: v1 kind: Service metadata: name: app2-nginx-clusterip-service labels: app: app2-nginx annotations: spec: type: ClusterIP selector: app: app2-nginx ports: - port: 80 targetPort: 80
# 생성
kubectl apply -f nginxApp2-ClusterIP-Service.yaml
app2-nginx에 대한 Deployment, Service를 생성하였다.
애플리케이션 생성 (Nginx-app2)
어휴 귀찮아,,
그냥 kube-manifests/ 폴더 안에 다 생성해두고 한꺼번에 배포합시다..
# 01-persistent-volume-claim.yaml 파일 작성
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-managed-disk-pvc spec: accessModes: - ReadWriteOnce storageClassName: managed-premium resources: requests: storage: 5Gi # AKS already provisioned Storage classes managed-premium and default as part of # default cluster setup
# 02-UserManagement-ConfigMap.yaml 파일 작성
apiVersion: v1 kind: ConfigMap metadata: name: usermanagement-dbcreation-script data: mysql_usermgmt.sql: |- DROP DATABASE IF EXISTS webappdb; CREATE DATABASE webappdb;
# 03-mysql-deployment.yaml 파일 작성
apiVersion: apps/v1 kind: Deployment metadata: name: mysql spec: replicas: 1 selector: matchLabels: app: mysql strategy: type: Recreate template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.6 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-db-password key: db-password ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql - name: usermanagement-dbcreation-script mountPath: /docker-entrypoint-initdb.d #https://hub.docker.com/_/mysql Refer Initializing a fresh instance volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: azure-managed-disk-pvc - name: usermanagement-dbcreation-script configMap: name: usermanagement-dbcreation-script
# 04-mysql-clusterip-service.yaml 파일 작성
apiVersion: v1 kind: Service metadata: name: mysql spec: selector: app: mysql ports: - port: 3306 clusterIP: None # This means we are going to use Pod IP
# 05-UserMgmtWebApp-Deployment.yaml 파일 작성
apiVersion: apps/v1 kind: Deployment metadata: name: usermgmt-webapp labels: app: usermgmt-webapp spec: replicas: 1 selector: matchLabels: app: usermgmt-webapp template: metadata: labels: app: usermgmt-webapp spec: initContainers: - name: init-db image: busybox:1.31 command: ['sh', '-c', 'echo -e "Checking for the availability of MySQL Server deployment"; while ! nc -z mysql 3306; do sleep 1; printf "-"; done; echo -e " >> MySQL DB Server has started";'] containers: - name: usermgmt-webapp image: stacksimplify/kube-usermgmt-webapp:1.0.0-MySQLDB imagePullPolicy: Always ports: - containerPort: 8080 env: - name: DB_HOSTNAME value: "mysql" - name: DB_PORT value: "3306" - name: DB_NAME value: "webappdb" - name: DB_USERNAME value: "root" - name: DB_PASSWORD valueFrom: secretKeyRef: name: mysql-db-password key: db-password
# 06-UserMgmtWebApp-Service.yaml 파일 작성
apiVersion: v1 kind: Service metadata: name: usermgmt-webapp-clusterip-service labels: app: usermgmt-webapp spec: type: ClusterIP selector: app: usermgmt-webapp ports: - port: 80 targetPort: 8080
# 07-Kubernetes-Secrets.yaml 파일 작성
apiVersion: v1 kind: Secret metadata: name: mysql-db-password type: Opaque data: db-password: ZGJwYXNzd29yZDEx
# 생성
kubectl apply -f kube-manifests/
Ingress 생성
이것도 Ingress Controller가 이미 생성되어 있어야겠죠 ?
# 01-Ingress-DomainName-Based-Routing-app1-2-3.yaml 파일 작성
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-app1-app2-app3 #annotations: #kubernetes.io/ingress.class: "nginx" spec: ingressClassName: nginx rules: - host: eapp1.bbiyak.shop http: paths: - path: / pathType: Prefix backend: service: name: app1-nginx-clusterip-service port: number: 80 - host: eapp2.bbiyak.shop http: paths: - path: / pathType: Prefix backend: service: name: app2-nginx-clusterip-service port: number: 80 - host: eapp3.bbiyak.shop http: paths: - path: / pathType: Prefix backend: service: name: usermgmt-webapp-clusterip-service port: number: 80
# 생성
kubectl apply -f 01-Ingress-DomainName-Based-Routing-app1-2-3.yaml
확인
# 웹 사이트 접근
eapp1.bbiyak.shop
eapp2.bbiyak.shop
eapp3.bbiyak.shop
잘 접근 되는 것을 확인
# Azure DNS Zone 조회
ExternalDNS에 의해, 리소스 배포 시 자동으로 레코드 집합이 반영되는 것을 확인
[참고 영상]
Udemy - Azure Kubernetes Service with Azure DevOps and Terraform
섹션 14 : Domain Name based Routing
[참고 문서]
'kubernetes > udemy' 카테고리의 다른 글
[udemy] Namespace (0) 2025.02.23 [udemy] Ingress - SSL with Let's Encrypt (0) 2025.02.23 [udemy] Ingress - ExternalDNS (0) 2025.02.22 [udemy] Ingress (0) 2025.02.18 [udemy] Azure Files (0) 2025.02.18