HomeLAB 구성하기 - 5

김명주·2025년 5월 26일

K8S 내부 Network 구성

Cilium CNI 와, Ingress Nginx 를 이용해 내부 네트워크 환경을 구성한다.

Control-Plane Node에서 아래 명령어들을 수행한다.

helm 설치

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod +x get_helm.sh
./get_helm.sh

Cilium 설치

# devices에는 노드에서 사용하는 네트워크 인터페이스명을 모두 입력
## '+'는 whild card '*' 와 동일한 의미입니다.
helm repo add cilium https://helm.cilium.io/
helm install cilium cilium/cilium --version 1.16.5 \
   --namespace kube-system \
   --set hubble.relay.enabled=true \
   --set hubble.ui.enabled=true \
   --set ipam.mode=kubernetes \
   --set MTU=1340

ingress-nginx 설치

# helm repo 추가
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

# ingress-nginx Controller 설치
helm upgrade --install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx --create-namespace \
  --set controller.hostNetwork=true \
  --set controller.kind=DaemonSet \
  --set controller.service.type=ClusterIP \
  --set controller.dnsPolicy=ClusterFirstWithHostNet \
  --set controller.tolerations[0].key="gateway" \
  --set controller.tolerations[0].effect="NoExecute" \
  --set controller.tolerations[0].operator="Exists"

# 설치 확인
kubectl get pods -n ingress-nginx

테스트 어플리케이션 배포

# yaml 파일 생성
mkdir app1
cd app1/
vim app.yaml
# app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app1
spec:
  replicas: 2
  selector:
    matchLabels:
      app: app1
  template:
    metadata:
      labels:
        app: app1
    spec:
      containers:
      - name: app1
        image: httpd:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: app1-service
spec:
  selector:
    app: app1
  ports:
  - port: 80
    targetPort: 80
  type: ClusterIP

Gateway Node의 Public IP를 획득한 뒤 아래의 $HOST_IP 에 해당하는 값에 Public IP를 입력한다.

💡

Public IP 획득하는 방법

방법1. Reserve public IP address 에서 발급한 Reserved public IP 값을 확인

방법2. Gateway VM에 접속해서 curl ifconfig.me 값을 확인

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app1-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: app1.$HOST_IP.nip.io # 수정 필요
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: app1-service
            port:
              number: 80

curl 명령어를 이용하여 아래와 같이 나왔다면 성공이다.

profile
개발자를 향해 달리는 사람

0개의 댓글