📂
Amazon EKS
  • Amazon EKS
  • 워크스페이스 생성하기
    • Cloud9 IDE 환경 구성
    • IAM 역할 생성
    • SSH & CMK Key 생성하기
  • EKS 클러스터 구축
    • EKS 클러스터 만들기
  • 쿠버네티스 대시보드 배포
    • Kubernetes 공식 대시보드 배포
  • 마이크로서비스 배포
    • 예제 애플리케이션 배포
    • 서비스 스케일(Scaling)
    • 애플리케이션 정리하기
  • 애플리케이션 배포 - Helm
    • HELM 설치
    • Helm으로 Nginx 배포
    • Helm을 사용하여 마이크로서비스 배포
    • 정리하기
  • 리소스 관리 - POD 배치
    • NodeSelector
    • Affinity and Anti-affinity
    • 더 실용적인 사용 사례
    • 정리하기
  • 리소스 관리 - Health Checks
    • Liveness 프로브 구성
    • Readiness 프로브 구성
    • 정리하기
  • 리소스 관리 - AutoScaling
    • HPA 구성하기
    • CA 구성하기
    • 정리하기
  • 네트워킹 - 서비스 노출
    • 서비스와 애플리케이션 연결
    • 서비스에 접근하기
    • 서비스 노출
    • Ingress
    • Ingress Controller
    • 정리하기
  • 네트워크 - Calico 정책
    • Calico 설치하기
    • Stars Policy Demo
    • 정리하기
  • Updating 권한설정 - RBAC
    • 테스트 POD 설치
    • 사용자 생성 및 맵핑
    • 역할과 바인딩
    • 정리하기
  • Updating 권한설정 - IAM 그룹
    • IAM Role, Group & User 생성하기
    • RBAC 설정하기
    • EKS 엑세스 테스트
    • 정리하기
  • Updating 권한설정 - Service account
    • OIDC 자격 증명 공급자 생성하기
    • IAM 역할 생성 및 지정
    • 샘플 POD 배포
    • 정리하기
  • Updating - 네트워크 - POD Security Group
    • SG 생성하기
    • RDS 생성하기
    • CNI 구성하기
    • SG 정책
    • Pod 배포하기
    • 정리하기
  • Updating - 모니터링 - Prometheus and Grafana
    • Prometheus 배포하기
    • Grafana 배포하기
    • 정리하기(Optional)
  • Updating 모니터링 - X-Ray
    • X-Ray DaemonSet 배포하기
    • 샘플 마이크로서비스 배포
    • X-Ray console 확인
    • 정리하기(Optional)
  • Updating 모니터링 - Container Insights
    • 사전 준비
    • Container Insights 구성하기
    • 부하 테스트
    • Container Insights 확인하기
    • 정리하기(Optional)
  • Updating CD - Gitops with Flux
    • 사전 준비
    • Codepipeline
    • EKS에 배포
    • 정리하기
  • Updating Argo Rollouts
  • Updating Service Mesh - AWS App Mesh
    • Fargate 및 OBSERVABILITY 구성
    • Product Catalog App 배포
    • APP MESH 설치
    • Porting to APP MESH
    • Virtual Gateway 구성
    • Canary
    • Observability
  • Updating 버전 업그레이드 - EKS Cluster
    • Upgrade EKS control Plane
    • Upgrade EKS CORE ADD-ONs
    • Upgrade Managed Node Group
Powered by GitBook
On this page
  • 1. Environment variables
  • 2. DNS

Was this helpful?

  1. 네트워킹 - 서비스 노출

서비스에 접근하기

Previous서비스와 애플리케이션 연결Next서비스 노출

Last updated 3 years ago

Was this helpful?

Kubernetes는 서비스를 찾는 두개의 기본 모드를 지원합니다:

  • environment variables

  • DNS

전자는 기본적으로 작동 하지만 후자는 클러스터 추가 기능(EKS 클러스터 생성시 자동으로 설치됨)이 필요 합니다.

1. Environment variables

Pod가 노드에서 실행될 때 kubelet은 각 활성 서비스에 대한 환경 변수 세트를 추가 합니다. 이로 인해 순서상의 문제가 발생합니다. 이유를 확인 하려면 실행중인 nginx 포드의 환경을 검사합니다 (포드 이름은 다를 수 있습니다).

kubectl -n my-nginx get pods -l run=my-nginx -o wide

이제 실행중인 nginx 파드 중 하나의 환경을 살펴보겠습니다.

export mypod=$(kubectl -n my-nginx get pods -l run=my-nginx -o jsonpath='{.items[0].metadata.name}')

kubectl -n my-nginx exec ${mypod} -- printenv | grep SERVICE

서비스에 대한 언급이 없습니다. 이는 서비스 이전에 복제본을 생성했기 때문입니다.

이 작업의 또 다른 단점은 스케줄러가 두 파드를 동일한 머신에 배치 할 수 있다는 것입니다. 이로 인해 서비스가 종료되면 전체 서비스가 중단 됩니다. 2개의 파드를 종료하고 Deployment가 다시 생성 할 때까지 기다리면 올바른 방법으로 서비스를 제대로 수행 할 수 있습니다. 이번에는 서비스 주변에 복제본이 존재합니다. 이렇게 하면 파드(모든 노드의 용량이 동일한 경우)에 퍼져있는 스케줄러 수준 서비스와 올바른 환경 변수가 제공됩니다.

kubectl -n my-nginx rollout restart deployment my-nginx
kubectl -n my-nginx get pods -l run=my-nginx -o wide

변경되는 순간의 출력은 다음과 같습니다.

파드가 파괴되고 다시 생성되기 때문에 파드의 이름이 다른 것을 알 수 있습니다. 이제 실행중인 nginx 파드 중 하나의 환경을 한 번 더 살펴 보겠습니다:

export mypod=$(kubectl -n my-nginx get pods -l run=my-nginx -o jsonpath='{.items[0].metadata.name}')

kubectl -n my-nginx exec ${mypod} -- printenv | grep SERVICE

이제 MY_NGINX_SERVICE_HOST라는 nginx 서비스 IP를 참조하는 환경 변수가 있습니다.

2. DNS

쿠버네티스는 DNS 이름을 다른 서비스에 자동으로 할당하는 DNS 클러스터 추가 서비스를 제공 합니다. 클러스터가 이미 CoreDNS를 실행하고 있는지 확인하려면 다음 명령을 사용하십시오.

kubectl get service -n kube-system -l k8s-app=kube-dns

CoreDNS에 대한 서비스가 kube-dns 로 불리고 있습니다.

본 실습의 나머지 부분에서는 IP(my-nginx)가 있는 서비스와 해당 IP에 이름을 할당한 DNS 서버 (CoreDNS 클러스터 추가 기능)가 있다고 가정 하므로 서비스와 통신 할 수 있습니다. 표준 방법 (예 : gethostbyname)을 사용하여 클러스터의 모든 파드에서 이를 테스트하기 위해 다른 curl 애플리케이션을 실행 해 보겠습니다.

kubectl -n my-nginx run curl --image=radial/busyboxplus:curl -i --tty

아래 명려어를 입력하여 실행합니다.

nslookup my-nginx

다음과 같은 결과가 나옵니다.

exit을 입력하고 컨테이너를 빠져 나옵니다.

 exit
 
CoreDNS