선릉역 1번 출구
kubernetes network 실습 본문
상황 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