# nginx --- apiVersion: apps/v1 kind: Deployment metadata: name: dep-nginx spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: webnginx image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: svc-nginx labels: svc: nginx spec: type: ClusterIP ports: - port: 9001 targetPort: 80 protocol: TCP selector: app: nginx# apache --- apiVersion: apps/v1 kind: Deployment metadata: name: dep-httpd spec: selector: matchLabels: app: httpd replicas: 3 template: metadata: labels: app: httpd spec: containers: - name: webapache image: httpd imagePullPolicy: IfNotPresent ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: svc-httpd spec: type: ClusterIP ports: - port: 9002 targetPort: 80 protocol: TCP selector: app: httpd
--- kind: Ingress apiVersion: networking.k8s.io/v1 metadata: name: ing-webserver spec: ingressClassName: nginx rules: - http: paths: - path: /web1 pathType: Prefix backend: service: name: svc-nginx # 서비스명 할당 port: number: 80 - path: /web2 # web2경로로 요청이 오면 pathType: Prefix backend: service: name: svc-httpd # 서비스명 할당 port: number: 80
- 인그레스 생성확인
# 각 노드 웹루트에 ingress에서 설정한 path 디렉토리 생성. # 예시에는 하나씩 나와있지만 nginx, apache 각 노드에 모두 생성. kubectl exec <POD명> -- mkdir /usr/share/nginx/html/web1 kubectl exec <POD명> -- mkdir /usr/local/apache2/htdocs/web2 # 미리 파드를 구분할 수 있게 만들어놓은 index.html 파일 각 파드에 복사 kubectl cp index.html <POD명>:/usr/share/nginx/html/web1/index.html kubectl cp index.html <POD명>:/usr/local/apache2/htdocs/web2/index.html
인그레스를 통한 접속 확인
# ingress-nginx네임스페이스의 정보를 확인한다. kubectl get all -n ingress-nginx
- ingress-nginx-controller의 포트를 확인할 수 있다. (31370)
# 접속 테스트 curl <마스터IP>:<ingress-nginx-controller의 포트>/<PATH> # web1 접속 curl 192.168.70.141:31370/web1/index.html
# web2 접속 curl 192.168.70.141:31370/web2/index.html
부하분산 테스트
# web1 테스트 for i in {1..100}; do curl -s 192.168.70.141:31370/web1/index.html; done | sort | uniq -c | sort -nr
- 100회 접속 테스트 시 각 파드마다 50% 확률로 분산되고 있다.
#web2 테스트 for i in {1..100}; do curl -s 192.168.70.141:31370/web2/index.html; done | sort | uniq -c | sort -nr
- 3파드에 대략 33% 확률로 분산되는걸 확인.