1. 주요 목적

 1.1. emptyDir 볼륨을 사용하여 Pod 내의 두 컨테이너(a1과 n1)가 데이터를 공유

  • emptyDir 볼륨은 Pod이 생성될 때 초기화되며, 컨테이너 간의 데이터 공유에 사용

 1.2. 컨테이너 구성

  • a1 (Alpine) : 공유 볼륨을 /test1 경로에 마운트
  • n1 (Nginx): 공유 볼륨을 /test2 경로에 마운트

 

2. 핵심 기능

  • 공유 메모리 : Pod 내에서 emptyDir을 통해 컨테이너 간 데이터를 주고 받을 수 있음
  • 컨테이너 간 협업 : Alpine 컨테이너에서 생성한 데이터를 Nginx 컨테이너에서 활용 가능

 

3. 세부 방법 

 

 3.1. Master PC

  step1) 디렉토리 만들기 : mkdir /vol
  step2) 디렉토리 이동 : cd /vol
  step3) yml 파일 만들기 : vi pod.yml 

 

apiVersion: v1
kind: Pod
metadata:
  name: vol-pod
  labels:
    test: vol
spec:
  containers:
  - name: a1
    image: alpine
    imagePullPolicy: Never
    command: [ "tail", "-F", "/home" ]
    volumeMounts:
    - mountPath: /test1
      name: behwang-vol
  - name: n1
    image: nginx
    imagePullPolicy: Never
    ports:
    - containerPort: 80
    volumeMounts:
    - mountPath: /test2
      name: behwang-vol
  volumes:
  - name: behwang-vol
    emptyDir: {}


  step4) yml 파일 실행 : kubectl apply -f pod.yml

 

 3.2. Node2 PC

  step1) 볼륨 디렉토리 찾기 : find / -name behwang-vol

  step2) 볼륨 디렉토리 이동 : cd [볼륨 디렉토리]

  step3) 텍스트 파일 만들기 : touch vol.txt 

 

 3.3. Master PC

  step1) 디폴트 컨테이너에 쉘 접속 : kubectl exec -it vol-pod -- sh 

  step2) 생성한 텍스트 파일 확인 : ls /test1

  step3) 나가기 : exit 


  step4) Nginx 컨테이너 쉘 접속 : kubectl exec -it vol-pod -c n1 -- bash

  step5) 생성한 텍스트 파일 확인 : ls /test2

  step6) 나가기 : exit

 
 

 

1. MetalLB 설치

 

 1.1. 다운로드 : wget https://raw.githubusercontent.com/metallb/metallb/v0.14.9/config/manifests/metallb-native.yaml 

 1.2. 설치 : kubectl apply -f metallb-native.yaml

 

2. MetalLB 설정

 

 2.1. MetalLB가 사용할 IP 주소 풀 정의 : vi ipaddress.yml

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: behwang-pool
  namespace: metallb-system
spec: 
 addresses:
 - 172.16.0.201-172.16.0.210

 

 2.2. 실행 : kubectl apply -f ipaddress.yml

 2.3. Layer 2(ARP) 광고 설정 : vi l2adv.yml

apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: test
  namespace: metallb-system
spec:
  ipAddressPools:
  - behwang-pool

 

 2.4. 실행 : kubectl apply -f l2adv.yml

 

3. NGINX 배포

 3.1. 디렉토리 만들기 : mkdir /dep

 3.2. 디렉토리 이동 : cd /dep

 3.3. NGINX 배포 설정 : vi loadnginx.yml

apiVersion: apps/v1
kind: Deployment
metadata: 
     name: load-nginx
     labels: 
        load: nginx
spec: 
    replicas:
    selector:
        matchLabels:
             app: nginx
        template:
           metadata:
                name: tem-nginx
                     labels:
                         app: nginx
        spec:
            containers:
             - name: nginx
               image: nginx
               imagePullPolicy: Never
               ports:
               - containersPort: 80 
 3.4. 실행 : kubectl apply -f loadnginx.yml
 3.5. LoadBalancer 서비스 설정 : vi loadsvc.yml
 
apiVersion: v1
kind: Service
metadata:
     name: load-dep
     labels:
        load: nginx
spec:
    selector:
       app: nginx
    type: LoadBalancer
    ports:
    - port: 80
      targetPort: 80
 3.6. 실행 : kubectl apply -f loadsvc.yml

 3.7. index.html 파일 만들기 : vi index.html

<html>
<body>
<h1>K8S-LOAD-WEB-1</h1>
</body>
</html>

 

 3.8. Pod 내부에 html 파일 복사 : kubectl cp index.html <PodName>:/usr/share/nginx/html/

  * 실행 중인 3개 Pod 중 첫번째 

 3.9. index.html 파일 만들기 : vi index.html

<html>
<body>
<h1>K8S-LOAD-WEB-2</h1>
</body>
</html>

 

 3.10. Pod 내부에 html 파일 복사 : kubectl cp index.html <PodName>:/usr/share/nginx/html/

  * 실행 중인 3개 Pod 중 두번째 

 3.11. index.html 파일 만들기 : vi index.html

<html>
<body>
<h1>K8S-LOAD-WEB-3</h1>
</body>
</html>

 

 3.11. Pod 내부에 html 파일 복사 : kubectl cp index.html <PodName>:/usr/share/nginx/html/

  * 실행 중인 3개 Pod 중 세번째 

 

 

 

 

 
 
 

1.  NGINX Ingress Controller 다운로드 및 배포

 1.1. deploy.yaml 다운로드 : wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml

 1.2. 실행 :  kubectl apply -f /root/deploy.yaml

 

2. Ingress 리소스 정의

 2.1. 파일 생성 : vi ingress.yml
 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: "nginx"
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /behwang1
        pathType: Prefix
        backend:
          service:
            name: svc1
            port:
              number: 80
      - path: /behwang2
        pathType: Prefix
        backend:
          service:
            name: svc2
            port:
              number: 80
 2.2. 실행 : kubectl apply -f ingress.yml -n ingress-nginx

 

3. NGINX 배포 및 서비스 생성

 3.1. nginx1 애플리케이션 배포 : kubectl create deploy nginx1 --image nginx --replicas 1 -n ingress-nginx
 3.2. nginx2 애플리케이션 배포 : kubectl create deploy nginx2 --image nginx --replicas 1 -n ingress-nginx
 3.3. nginx1 서비스 노출 : kubectl expose deploy nginx1 --name svc1 --port 80 -n ingress-nginx
 3.4. nginx2 서비스 노출 : kubectl expose deploy nginx2 --name svc2 --port 80 -n ingress-nginx

 

4. index.html 수정

 4.1. nginx1 index.html 수정 
  step1) nginx1 Pod 내부 접근 : kubectl exec -it nginx1-b7c99b5c8-pr2sw -n ingress-nginx -- bash
   * pod 명은 "kubectl get pods -o wide -n ingress-nginx" 명령어로 확인 
  step2) index.html 수정 
 
cat > /usr/share/nginx/html/index.html << eof
<html><body><h1>INGRESS-TEST-BEHWANG1</h1></body></html>
eof

  step3) 나가기 : exit

 

 4.2. nginx2 index.html 수정 
  step1) nginx2 Pod 내부 접근 : kubectl exec -it nginx2-b7c99b5c8-pr2sw -n ingress-nginx -- bash
  step2) index.html 수정 
 
cat > /usr/share/nginx/html/index.html << eof
<html><body><h1>INGRESS-TEST-BEHWANG1</h2></body></html>
eof

  step3) 나가기 : exit

 

5. 확인 

 5.1. 외부 ID 및 포트 번호 확인 : kubectl get svc -o wide -n ingress-nginx

 

 5.2. 외부 IP 주소 및 엔드포인트 URL 입력

 

+ Recent posts

# 드래그 금지