Ingress - Virtual Host based
Ingress - Virtual Host based
Ingress setting for Istio Monitoring System
apiVersion: networking.k8s.io/v1
kind: "Ingress"
metadata:
name: "shopping-ingress"
namespace: "istio-system"
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
ingressclass.kubernetes.io/is-default-class: "true"
spec:
ingressClassName: nginx
rules:
- host: "kiali.service.com"
http:
paths:
-
path: /
pathType: Prefix
backend:
service:
name: kiali
port:
number: 20001
- host: "prom.service.com"
http:
paths:
-
path: /
pathType: Prefix
backend:
service:
name: prometheus
port:
number: 9090
- host: "gra.service.com"
http:
paths:
-
path: /
pathType: Prefix
backend:
service:
name: grafana
port:
number: 3000
을 ingress.yaml 파일로 만들어 저장한후 생성한다
$ kubectl create -f ingress.yaml
이때 yaml 문법 validation 오류가 생긴다면, 설치된 쿠버네티스의 버전에 따라 발생할 수 있으며, validate 옵션을 해제하여 설정한다:
생성된 ingress 의 상태를 확인한다:
$ kubectl get ingress -n istio-system -w
NAME HOSTS ADDRESS PORTS AGE
istio-ingress * ??? 80 7m36s
아무리 기다려도 ADDRESS 부분에 값이 채워지지 않음을 알 수 있다. 원인은 내게 gateway provider 가 없기 때문이다. Ingress 는 Kubernetes 의 스펙일 뿐, 이를 실질적으로 지원하는 ingress controller 가 필요하기 때문이다. 다행히, 우리에겐 무료로 사용할 수 있는 nginx 인그레스 프로바이더를 사용할 수 있다.
Ingress Provider 설치하기
오픈소스 ingress provider 인 nginx ingress controller 를 설치하기 위해서는 하나 이상의 kubernetes 구성요소들을 설치해야 하기 때문에 이를 쉽게 Helm Chart 를 통해서 설치할 수 있다.
Helm으로 Ingress Controller 설치
- Helm repo 설정
helm repo add stable https://charts.helm.sh/stable
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
kubectl create namespace ingress-basic
- nginx controller 설치
helm install nginx-ingress ingress-nginx/ingress-nginx --namespace=ingress-basic
- 설치확인 Ingress Controller의 EXTERNAL-IP가 API Gateway 엔드포인트: 메모 必
kubectl get all --namespace=ingress-basic
- 이제, 자동으로 ingress 의 ADDRESS 부분의 설정이 채워지는 것을 확인한다:
$ kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
istio-ingress * acbdde7c8e29f451daee5605b8c7840c-1087513605.ap-northeast-2.elb.amazonaws.com 80 7m36s
아마존의 경우 획득한 주소가 도메인 네임이므로, IP Address 를 얻기위해서 ping 을 이용하여 address 를 얻는다:
ping acbdde7c8e29f451daee5605b8c7840c-1087513605.ap-northeast-2.elb.amazonaws.com
# 리턴되는 ip address 를 획득
가상호스트를 테스트하기 위해서 내의 hosts 파일에 아래를 추가한다: (윈도우에서는 C:\Windows\System32\drivers\etc\hosts 에서 찾을 수 있고 리눅스와 맥은 /etc/hosts 파일을 수정하면 된다)
<획득한 ingress의 External IP> kiali.service.com, prom.service.com, gra.service.com
파일 저장을 위하여 윈도우에서 메모장으로 열때 "관리자 권한으로 실행" 하여 메모장 애플리케이션을 열어야 하고, 리눅스와 맥에서는 "sudo vi /etc/hosts" 로 수정해야 한다.
이제 브라우저를 열고 prom.service.com와 gra.service.com 에 접속해본다.
혹은 curl로 확인가능하다:
curl -H "Host: prom.service.com" <IP 주소>
<a href="/graph">Found</a>.