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

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

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

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

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

결과는 다음과 같습니다.

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

 exit
 

Last updated