1. ingress란

클러스터 외부에서 내부로 접근하는 요청들을 어떻게 처리할지 정의해둔 규칙들의 모음.
외부에서 접근가능한 url을 사용할 수 있게 하고,
트래픽 로드밸런싱도 해주고,
ssl 인증서 처리,
도메인 기반 가상 호스팅을 제공.
ingress 자체는 이런 규칙들을 정의해둔 자원.
실제 동작하게 해주는게 ingress controller.
클라우드서비스를 사용하는것이 아니라면
ingress와 ingress controller를 직접 연동해주어야함.

이때 가장 많이 사용되는게 kubernetes에서 제공하는 ingress-nginx.

2. ingress-nginx 설치, 사용.

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml

kubectl expose deploy nginx-ingress-controller --type=NodePort -n ingress-nginx

kubectl apply -f test.yaml

# 확인
kubectl describe ingress test

kubctl apply -f deployments-nginx.yaml

kubectl expose deploy nginx-deployment --name s1

 

  • test.yaml 내용

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
    name: test
    annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
    rules:
     - host: xxx.xxx.xx
    paths:
     - path: /foos1
    backend:
    serviceName: s1
    servicePort: 80
     - path: /bars2
    backend:
    serviceName: s2
    servicePort: 80
     - host: xxx.xxx.xx
    http:
    paths:
     - backend:
    serviceName: s2
    servicePort: 80

     

  • deployments-nginx.yaml 내용.
    kind: Deployment
    metadata:
    name: nginx-deployment
    labels:
    app: nginx
    spec:
    replicas: 3
    selector:
    matchLabels:
    app: nginx
    template:
    metadata:
    labels:
    app: nginx
    spec:
    containers:
    - name: nginx
    image: nginx
    ports:
    - containerPort: 80

 

3. 접근

kubectl get services --all-namespaces 에서 나온 port와 s1에 설정한 host, path를 이용하여
xxx.xxx.xxx:31536/foos1 로 접근 가능.

+ Recent posts