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 입력

 

1. 요구 사항 : 서로 다른 가상 네트워크 상의 가상머신 간 통신  

동일한 가상 네트워크 내 통신은 별도의 연결 작업이 필요없지만 서로 다른 가상 네트워크 통신시 별도의 연결 작업 (피어링) 이 필요함.  

  Subnet  VM
vnet1 10.0.0.0/16 10.0.0.4/24
vnet2 172.16.0.0/16 172.16.0.4/24

 

2. 세부 방법

 

 2.1. 가상 네트워크 검색  → 기존에 만들었던 vnet1 필터링 

 

 2.2. 설정  → 피어링  

 

 2.3. 추가

 

 2.4. 원격 가상 네트워크 이름 : vnet2-vnet1 → 가상 네트워크는 vnet2 선택  → 액세스 및 트래픽 허용 체크 

 

2.5. 로컬 가상 네트워크 이름 : vnet1-vnet2 → 액세스 및 트래픽 허용 체크    추가  

  

 

+ Recent posts

# 드래그 금지