Kubernetes 쿠버네티스 - Minikube 환경에서 SSL(https) 적용하기

salgu·2023년 7월 18일
1

kubernetes

목록 보기
12/16
post-thumbnail

Local에 DNS 설정

127.0.0.1 salgu.com

sudo vi /etc/hosts 명령어를 이용하여 host를 추가해줍니다.

인증서, 비밀키 생성

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=salgu.com/0=ihp001"

DNS에 등록해주었던 Domain으로 인증서와 비밀키를 생성해줍니다.

인증서, 비밀키 인코딩

cat tls.key | base64
cat tls.crt | base64
Kubernetes의 Secret Manifest에 등록해주기 위해 .key와 .crt 파일을 base64로 인코딩한 값을 저장해줍니다.

Secret Manifest 작성

apiVersion: v1
kind: Secret
metadata:
  name: tls-secret
  namespace: core
type: kubernetes.io/tls
data:
  tls.key: <인코딩된 .key>
  tls.crt: <인코딩된 .crt>

kubectl apply -f <Secret Manifest>
Secret Manifest 작성한 뒤 쿠버네티스에 적용시켜줍니다.

Ingress에 Secret 적용

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  namespace: core
  labels:
    app: ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    kubernetes.io/ingress.class: "nginx"
spec:
  tls:
  - secretName: tls-secret
  rules:
  - http:
      paths:
      - pathType: Prefix
        path: /auth(/|$)(.*)
        backend:
          service:
            name: auth
            port:
              number: 18081

spec.tls.secretName에 적용했던 Secret을 적용시켜주면 정상적으로 SSL 설정이 적용되게 됩니다.

결과

get 명령어로 ingress를 조회하면 PORTS에 443 포트가 열린것을 확인할 수 있습니다.

https로 요청을 보내게 되면 정상적으로 응답이 옵니다.

정리

Ingress는 Service 추상화하였고 의미있는 단일 엔드포인트 제공합니다.
클라이언트는 클러스터 안에 있는 여러 Service를 하나의 엔드포인트에 접근할 수 있고 SSL/TLS 인증서를 쉽게 관리할 수 있습니다.





reference:

profile
https://github.com/leeeesanggyu, leeeesanggyu@gmail.com

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

덕분에 좋은 정보 얻어갑니다, 감사합니다.

답글 달기