[쿠버네티스 네트워크] 인그레스 (ingress) 소개

IMKUNYOUNG·2023년 7월 26일
0

쿠버네티스

목록 보기
38/64

인그레스의 필요성

  • 인그레스는 하나의 IP이나 도메인으로 다수의 서비스 제공 (api gateway 패턴, ALB 형태)


  • 프라이빗 환경에서 인그레스를 사용할 수 있는 ingress-nginx를 설치
  • 쿠버네티스에 파드 형태로 띄워서 설정하는 방법 확인
  • nginx-ingress를 파드로 떠있으면서 다시 서비스로 연결할 수 있는 역할을 수행



룰 예제

  • 룰의 kind와 path를 사용
  • 어떻게 동작하는지 예제로 구성



인그레스 설치하기

  • 인그레스를 설치하는 명령어
git clone https://github.com/kubernetes/ingress-nginx/
kubectl apply -k `pwd`/ingress-nginx/deploy/static/provider/baremetal/
kubectl delete validatingwebhookconfigurations.admissionregistration.k8s.io ingress-nginx-admission
  • 마지막 명령은 webhook (web traffic 가져와서 변경하는 거) 구성을 삭제함, 이 기능으로 ingress가 정상적으로 구동되지 않는 현상이 있음
  • 인그레스를 구성하면 nginx 서버가 자동으로 구성되며 룰을 설정할 수 있는 준비가 세팅됨



인그레스 테스트용 http-go 배포


  • http-go 디플로이먼트와 서비스를 배포
kubectl create deployment http-go --image=gasbugs/http-go:ingress # 인그레스 테스트용 http-go
kubectl expose deployment http-go --port=80 --target-port=8080

  • 인그레스를 다음과 같이 구성하여 룰 생성
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: http-go-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /welcome/test
spec:
  rules:
    - http:
        paths:
          - pathType: Exact
            path: /welcome/test
            backend:
              service:
                name: http-go
                port: 
                  number: 80
EOF

  • /welcome/test로 접속하면 http-go로 연결

  • 접속 테스트
# curl 127.0.0.1:30703/welcome/test
Welcome! http-go-79c5db8577-c5rld


TLS 인그레스 활성화 방법

  • 인증서 생성하고 secret 저장소를 구성
  • tls 인증서 정보를 ingress에 전달하여 생성
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-out ingress-tls.crt \
-keyout ingress-tls.key \
-subj "/CN=ingress-tls
kubectl create secret tls ingress-tls \
--namespace default \
--key ingress-tls.key \
--cert ingress-tls.crt
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: http-go-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /welcome/test
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
  - hosts:
    - gasbugs.com
    secretName: ingress-tls
  rules:
    - host: gasbugs.com
      http:
        paths:
          - pathType: Exact
            path: /welcome/test
            backend:
              service:
                name: http-go
                port: 
                  number: 80
EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: http-go-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /welcome/test
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
  - hosts:
    - gasbugs.com
    secretName: ingress-tls
  rules:
    - host: gasbugs.com
      http:
        paths:
          - pathType: Exact
            path: /welcome/test
            backend:
              service:
                name: http-go
                port: 
                  number: 80
curl http://gasbugs.com:32049/welcome/test -kv --resolve gasbugs.com:32049:127.0.0.1

curl https://gasbugs.com:31915/welcome/test -kv --resolve gasbugs.com:31915:127.0.0.1

curl https://gasbugs1.com:31915/welcome/test -kv --resolve gasbugs1.com:31915:127.0.0.1

0개의 댓글