선릉역 1번 출구

kubernetes network 실습 본문

Computer/Docker

kubernetes network 실습

choideu 2024. 7. 25. 20:58

상황 1. 1개의 Pod 內 Container끼리 통신

 

① 1개의 Pod의 2개의 Container 생성 Yaml 파일

apiVersion: v1  # API 버전
kind: Pod  # Pod 종류
metadata:
  name: my-localhost-pod  # Pod의 이름
spec:
  containers:
  - name: nginx  # 첫 번째 컨테이너 이름
    image: nginx  # nginx 이미지 사용
  - name: another-container  # 두 번째 컨테이너 이름
    image: curlimages/curl  # curl 이미지 사용
    command: ["sh", "-c", "sleep 1000"]  # 컨테이너가 실행할 명령 설정

 

② pod의 세부 사항 조회 시 2개의 container 설정 확인 가능

 

③ 컨테이너 통신 시도

kubectl exec my-localhost-pod -c another-container -- curl localhost:80
  • kubectl exec: Kubernetes 클러스터에서 특정 Pod 내의 컨테이너에서 명령을 실행하는 명령어
  • my-localhost-pod: 명령을 실행할 Pod의 이름
  • -c another-container: Pod 내에서 실행할 특정 컨테이너의 이름으로, 여기서는 another-container라는 이름의 컨테이너를 지정
  • --: kubectl exec 옵션과 명령어를 구분하는 구분자
  • curl localhost:80: another-container 컨테이너 내에서 실행할 명령으로, curl을 사용하여 Pod 내의 localhost의 80번 포트에 요청

 

결론: 하나의 Pod 내에 위치한 컨테이너끼리는 동일한 네트워크 네임스페이스를 공유하므로, 'localhost' 또는 '127.0.0.1'로 통신하며 port 번호로 구분함

└ 각 컨테이너는 독립적인 프로세스로 실행되지만 네트워크 측면에서, Pod 내부에서는 동일한 호스트로 취급됨


 

상황 2. 클러스터 내부, Pod끼리 통신

 

① Deployment를 사용해 3개의 Pod 생성

apiVersion: apps/v1  # API 버전
kind: Deployment  # Deployment 종류
metadata:
  name: my-nginx-deploy  # Deployment의 이름
spec:
  replicas: 3  # 복제 개수
  selector:
    matchLabels:
      app: my-nginx  # Pod를 선택할 라벨 설정
  template:
    metadata:
      labels:
        app: my-nginx  # Pod의 라벨 설정
    spec:
      containers:
      - name: nginx  # 컨테이너 이름
        image: nginx  # 사용할 이미지

 

② Service를 사용해 Deploy를 통해 생성된 Pod끼리의 내부 통신 설정

apiVersion: v1  # API 버전
kind: Service  # Service 종류
metadata:
  name: my-service  # Service의 이름
spec:
  type: ClusterIP  # Service 유형 (ClusterIP: 클러스터 내부에서만 접근 가능한 IP를 할당)
  selector:
    app: my-nginx  # 연결할 Pod을 선택할 라벨 설정
  ports:
  - protocol: TCP  # 포트의 프로토콜 설정 (TCP)
    port: 9080  # Service가 노출하는 포트
    targetPort: 80  # Pod의 컨테이너에서 사용하는 포트

 

③ kubernetes 클러스터 내 Pod 간 통신 구현

- <service-name>:<port> 으로 다른 pod에 접근


상황 3. Pod의 container에서 외부 접속

 

① ExternalName 유형의 Service 생성

apiVersion: v1  # API 버전
kind: Service  # Service 종류
metadata:
  name: google-service  # Service의 이름
spec:
  type: ExternalName  # Service 유형 (ExternalName: 외부 서비스를 Kubernetes 내에서 사용할 수 있도록 해줌)
  externalName: google.com  # 외부 서비스의 도메인 이름 설정

 

② 특정 container에서 "google-service"인 service를 사용하여 외부 접속 시도

  • kubectl exec: Kubernetes 클러스터 내의 Pod에서 명령을 실행하는 데 사용되는 exec 명령
  • my-localhost-pod: 명령을 실행할 Pod의 이름
  • -c another-container: Pod 내에서 실행할 특정 컨테이너의 이름으로, 여기서는 another-container라는 이름의 컨테이너를 지정함
  • --: kubectl exec 옵션과 명령어를 구분하는 구분자
  • curl --header "Host: www.google.com" google-service: another-container 컨테이너에서 실행할 curl 명령어로. 여기서는 Host 헤더를 www.google.com으로 설정하여 google-service라는 Kubernetes Service에 접근하는 예시입니다.

'Computer > Docker' 카테고리의 다른 글

kubernetes security 실습  (0) 2024.07.25
Jib로 자바 컨테이너 빌드시 Credential 에러  (1) 2024.02.16
Docker Python  (0) 2022.12.03
Docker 프로세스  (0) 2022.11.27
Docker 웹서버 구축하기  (0) 2022.11.27
Comments