1.6.2. 예: DNS 사용 사례
이 예에서는 한 Pod 세트에서 프런트 엔드 애플리케이션이 실행 중이며 백엔드 서비스가 다른 Pod 세트에서 실행되고 있습니다. 프런트 엔드 애플리케이션은 백엔드 서비스와 통신해야 합니다. 안정적인 IP 주소와 DNS 이름을 제공하는 백엔드 Pod에 대한 서비스를 생성합니다. 프런트 엔드 Pod는 개별 Pod IP 주소 변경과 관계없이 이 DNS 이름을 사용하여 백엔드 서비스에 액세스합니다.
백엔드 Pod에 대한 서비스를 생성하면 프런트 엔드 Pod에서 백엔드 서비스와 통신하는 데 사용할 수 있는 안정적인 IP 및 DNS 이름 backend-service.default.svc.cluster.local 을 제공합니다. 이 설정으로 개별 Pod IP 주소가 변경되더라도 통신이 일관되고 안정적으로 유지됩니다.
다음 단계에서는 DNS를 사용하여 백엔드 서비스와 통신하도록 프런트 엔드 Pod를 구성하는 방법의 예를 보여줍니다.
백엔드 서비스를 생성합니다.
백엔드 Pod를 배포합니다.
apiVersion: apps/v1 kind: Deployment metadata: name: backend-deployment labels: app: backend spec: replicas: 3 selector: matchLabels: app: backend template: metadata: labels: app: backend spec: containers: - name: backend-container image: your-backend-image ports: - containerPort: 8080백엔드 Pod를 노출하도록 서비스를 정의합니다.
apiVersion: v1 kind: Service metadata: name: backend-service spec: selector: app: backend ports: - protocol: TCP port: 80 targetPort: 8080
프런트 엔드 Pod를 생성합니다.
프런트 엔드 Pod를 정의합니다.
apiVersion: apps/v1 kind: Deployment metadata: name: frontend-deployment labels: app: frontend spec: replicas: 3 selector: matchLabels: app: frontend template: metadata: labels: app: frontend spec: containers: - name: frontend-container image: your-frontend-image ports: - containerPort: 80Pod 정의를 클러스터에 적용합니다.
$ oc apply -f frontend-deployment.yaml
백엔드와 통신하도록 프런트 엔드를 구성합니다.
프런트 엔드 애플리케이션 코드에서 백엔드 서비스의 DNS 이름을 사용하여 요청을 보냅니다. 예를 들어 프런트 엔드 애플리케이션이 백엔드 Pod에서 데이터를 가져와야 하는 경우 애플리케이션에 다음 코드가 포함될 수 있습니다.
fetch('http://backend-service.default.svc.cluster.local/api/data') .then(response => response.json()) .then(data => console.log(data));