반응형


- pod는 일회성

- 여러 pod가 단일 서비스를 제공할 경우, (클라이언트 입장에서)모든 pod는 단일 ip 주소를 통해 액세스 할 수 있어야 한다.


Kubernetes Service

- 동일한 서비스를 제공하는 pod group 에 단일 진입 점을 만들기 위해 생성하는 리소스

- 각 서비스에는 서비스가 존재하는 동안 절대로 변경되지 않는 ip 주소와 port 가 있다.

   클라이언트는  해당 IP 및 포트에 연결할 수 있고, 이런 연결은 해당 서비스를 지원하는 pod 중 하나로 라우팅 된다.

- 서비스는 오직 단일 port 뿐만 아니라, 여러개의 port 도 지원할 수 있다.


[Service의 주 목적 ]

 포드들의 그룹을 클러스터상의 포드에게 노출하는것.



- 원격접속

  $kubectl exec [pod명] 


- Client 로 부터 받은 요청을 매번 같은  pod로 요청하고 싶으면,  sessionAffinity 속성을 ClientIP 로 하면 된다.

   spec: 

       sessionAffinity: ClientIP (None 으로 하는 경우는 랜덤하게 됨)



- 포드의 환경변수 확인

   $kubectl exec [포드명] env


- pod 안으로 들어가기

   $kubectl exec -it [pod명] bash



- 클러스터 외부 서비스에 연결

   . 서비스는 pod를 직접 링크하지 않음

   . 서비스와 pod 사이에 endpoint라는 리소스가 위치함

   . endpoint는 서비스에 의해 노출되는 IP주소와 PORT의 목록임


- 서비스에 대한 상세정보 확인

   $kubectl describe svc [서비스명]


- 서비스의 endpoint 확인

 $kubectl get endpoints [서비스명]


- pod Selector 는 들어오는 연결을 리다이렉트할때 직접 사용되진 않고, ip와 port의 목록을 만드는데 사용된다.

  그리고 이 만들어진 목록이 endpoint에 저장된다. 

- pod Selector 없이 서비스를 만들었다면, 쿠버네티스는 endpoint 리소스 조차 만들지 못한다.



- 서비스가 외부에서 Access 가능하게 하는 방법

1) NodePort 서비스 사용

   . 서비스를 생성하고  타입을 NodePort 로 지정


- jsonPath 를 이용해 모든 노드의 ip 얻기

   $kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'



2) 외부 로드밸런서를 이용한 서비스 사용

   . 서비스 타입을 LoadBalancer 로 지정

   . 로드밸런서는  자신만의 고유하면서 외부에서 액세스가 가능한 ip 주소를 갖고 모든 연결을 서비스로 리다이렉트 한다.

   

   - externalTrafficPolicy

     : 외부 클라이언트가 서비스로 노드포트를 통해 연결할 때, 임의로 선택된 pod는 연결요청을 받았던 같은 node에서 실행될 수도 아닐수도 있다.

       이를 요청받은 노드에 있는 pod에서 실행되도록 하기 위해 서비스 spec 에 externalTrafficPolicy: Local   을 지정하면 , 로컬내에서  실행되고 있는 pod를 호출하게 된다.

      단, 로컬에 pod가 없으면 대기한다.

            그리고, 이렇게 연결할때 단점은, 일반적으로의 연결은 모든 pod에 걸쳐 전달되지만 이렇게 구성하면 모든 pod 가 되지 않는다.


3) Ingress 리소스를 이용한 방법

    . 필요한 이유 : 각 loadbalancer 서비스는 그 자신만의 외부 ip를 갖는 자체 로드밸런서를 요구하기 때문

    . Ingress 리소스를 작동시키려면, 클러스터에서 Ingress 컨트롤러를 실행해야 한다.

    

- 모든 네임스페이스의 pod 조회

  $kubectl get po --all-namespaces









   



반응형

'DevOps' 카테고리의 다른 글

pod-레플리케이션컨트롤러-서비스  (0) 2019.01.10
쿠버네티스 명령어#5  (0) 2019.01.02
Docker 명령어  (0) 2018.12.28
쿠버네티스 명령어#3  (0) 2018.12.27
쿠버네티스 명령어 #2  (0) 2018.12.27

+ Recent posts