Cilium CNI 와, Ingress Nginx 를 이용해 내부 네트워크 환경을 구성한다.
Control-Plane Node에서 아래 명령어들을 수행한다.
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
# 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
# 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 명령어를 이용하여 아래와 같이 나왔다면 성공이다.
