본문 바로가기

DevOps/쿠버네티스

INGRESS를 사용한 쿠버네티스 네트워크 심화(sticky session, ssl connection)


Annotation

## label(key=value)이랑 비슷하지만 annotation은 label로 적합하지 않은 값 컨트롤 가능

## ingress controller에 추가할 기능들을 annotation으로 설정 하면 좋음


Ingress sticky Session

## clientIP의 ip로 부터 호출이 오면 해당 호출을 받은 pod에만 지속적으로 가도록(설정하지 않으면 round robin으로 pod이 계속 바뀐다.

## NGINX는 cookie만 가능 - cookie로 같은 컴퓨터로 부터 호출인지 판단함.


apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-hash: "sha1"
    nginx.ingress.kubernetes.io/session-cookie-name: "route"
  name: ing-test
spec:
  rules:
  - host: host14-4.cloud.com
    http:
      paths:
      - path: /
        backend:
          serviceName: node-js
          servicePort: 80
      - path: /test
        backend:
          serviceName: kubia-test
          servicePort: 80


$ k apply -f ing.yml -n ingress-nginx

## ingress-nginx 네임스페이스에 ing.yml을 적용한다.(이미 떠져 있는 경우)


쿠버네티스 SSL 접속 만들기

openssl genrsa -out tls.key 2048
openssl req -new -x509 -key tls.key -out tls.crt -days 3650 -subj /CN=host14-4.cloud.com
## .crt, .key 만들기


k create secret tls tls-secret --cert=tls.crt --key=tls.key -n ingress-nginx

## secret 만들기(인증서와 인증서 key를 조합)



Ingress nginx에 secret 적용하기

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-hash: "sha1"
    nginx.ingress.kubernetes.io/session-cookie-name: "route"
  name: ing-test
spec:
  tls:
  - hosts:
    - "host14-4.cloud.com"
    secretName: tls-secret
  rules:
  - host: host14-4.cloud.com
    http:
      paths:
      - path: /
        backend:
          serviceName: node-js
          servicePort: 80
      - path: /test
        backend:
          serviceName: kubia-test
          servicePort: 80


$ k apply -f ing.yml -n ingress-nginx

$ k describe ing ing-test -n ingress-nginx

## tls 관련 정보 적용



$ k get svc -n ingress-nginx

## ingress-nginx 네임스페이스의 service 확인하여 port 정보획득

## https://<host>:<443 port> 접속해보면 정상적으로 접속됨



$ k delete ns ingress-nginx

## 이때까지 작업했던 namespace에 대해서 삭제하려면 위와 같은 방식으로 모든 네임스페이스 관련 서비스들 pod들 삭제 가능