📂
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. 클러스터에 파드 노출하기
  • 2. 서비스 생성하기

Was this helpful?

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

서비스와 애플리케이션 연결

1. 클러스터에 파드 노출하기

아래와 같이 nginx 배포를 만들고 컨테이너 포트 사양을 확인합니다.

cat <<EoF > ~/environment/run-my-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
  namespace: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 2
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80
EoF

다음을 실행하면 클러스터의 모든 노드에서 액세스 할 수 있습니다.

kubectl create ns my-nginx

kubectl -n my-nginx apply -f ~/environment/run-my-nginx.yaml

파드가 실행중인 노드를 확인 합니다.

kubectl -n my-nginx get pods -o wide

파드의 IP를 확인합니다.

kubectl -n my-nginx get pods -o yaml | grep 'podIP:'

2. 서비스 생성하기

이제 클러스터 전체 주소 공간에서 nginx가 실행되는 파드를 가지고 있습니다. 이론적으로는 이러한 파드와 직접 대화 할 수 있지만 노드가 죽으면 어떻게 될까요? 파드는 노드와 함께 죽고 Deployment는 다른 IP로 새로운 파드를 생성합니다. 이것이 서비스가 풀어야 하는 문제 입니다.

쿠버네티스 서비스는 클러스터에서 실행되는 논리적 파드 집합을 정의하는 추상화로, 모두 동일한 기능을 제공 합니다. 생성 될 때 각 서비스에는 고유 한 IP 주소 (clusterIP 라고도 함)가 할당 됩니다. 이 주소는 서비스의 수명과 관련이 있으며 서비스가 활성화 된 동안에는 변경 되지 않습니다. 파드는 서비스와 통신 하도록 구성 할 수 있으며 서비스에 대한 통신이 서비스의 구성인 일부 파드에 자동으로 로드 밸런싱 된다는 것을 알 수 있습니다.

kubectl expose를 사용하여 2 개의 nginx replica에 대한 서비스를 생성 할 수 있습니다.

kubectl -n my-nginx expose deployment/my-nginx

다음과 같은 결과를 확인할 수 있습니다.

이 사양은 run: my-nginx 레이블이 있는 모든 파드에서 TCP 포트 80을 대상으로 하는 서비스를 만들고 추상화 된 서비스 포트 (targetPort : 컨테이너가 트래픽을 허용하는 포트, port:는 추상화 된 서비스 포트로 다른 포드가 서비스에 액세스하는 데 사용하는 포트)에 노출 합니다. 서비스 정의에서 지원되는 필드 목록을 보려면 서비스 API 개체로 확인합니다.

kubectl -n my-nginx get svc my-nginx

앞서 언급 했듯이 서비스는 파드 그룹에서 지원 되고 이러한 파드는 엔드 포인트를 통해 노출 됩니다. 서비스의 셀렉터는 지속적으로 평가되며 결과는 my-nginx 라고도 하는 엔드 포인트 객체에 게시 됩니다. 파드가 죽으면 엔드 포인트에서 자동으로 제거되고 서비스의 셀렉터와 일치하는 새 파드가 엔드 포인트에 자동으로 추가됩니다.

엔드 포인트를 확인합니다. IP는 첫 번째 단계에서 생성 된 파드와 동일합니다:

kubectl -n my-nginx describe svc my-nginx

이제 클러스터의 모든 파드에서 CLUSTER-IP: PORT의 nginx 서비스를 curl로 확인 할 수 있습니다.

my-nginx Service IP로 _MyClusterIP_라는 변수를 설정 합니다.

export MyClusterIP=$(kubectl -n my-nginx get svc my-nginx -ojsonpath='{.spec.clusterIP}')

load-generator (컨테이너 내부에 MyClusterIP 변수도 설정 됨)라는 새 배포를 만들고 파드 컨테이너에서 대화형 TTY 셸을 가져 옵니다.

kubectl -n my-nginx run -i --tty load-generator --env="MyClusterIP=${MyClusterIP}" --image=busybox /bin/sh

ClusterIP로 nginx의 welcome 페이지에 연결합니다.

wget -q -O - ${MyClusterIP} | grep '<title>'

결과는 다음과 같습니다.

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

 exit
 
Previous네트워킹 - 서비스 노출Next서비스에 접근하기

Last updated 3 years ago

Was this helpful?

-env 매개변수에 대한 더 많은 정보가 필요하면 를 클릭하세요.

여기