Kubernetes/Kubernetes Best Practices

[Scenario Playbook Ep.13] 🚀 Ingress 편 #2 | TLS 인증서 적용 및 보안 설정

ygtoken 2025. 3. 16. 14:24
728x90

 

쿠버네티스에서 Ingress는 외부 트래픽을 내부 서비스로 전달하는 역할을 합니다.

이번 글에서는 Ingress 리소스에 TLS 인증서를 적용하여 HTTPS를 활성화하는 방법과 보안 강화를 위한 설정을 다룹니다.

 


📌 글에서 다루는 상황들

 

1️⃣ Ingress에 TLS 인증서를 적용하여 HTTPS 활성화

2️⃣ Ingress 보안 강화 (Redirect, CORS, Rate Limit 설정)

 

각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.

 


1️⃣ Ingress에 TLS 인증서를 적용하여 HTTPS 활성화

 

❓ 문제 상황

 

운영팀에서 Ingress를 통해 제공되는 서비스에 HTTPS를 적용해야 하는 요구사항이 생겼습니다.

클라이언트가 HTTP가 아닌 HTTPS를 통해 접근할 수 있도록 TLS 인증서를 설정해야 합니다.

example.com 도메인을 사용하며 HTTPS를 지원해야 합니다.

tls-secret이라는 Secret을 생성하여 TLS 인증서를 적용해야 합니다.

HTTP 요청이 들어오면 자동으로 HTTPS로 리디렉션되어야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. TLS 인증서를 Secret으로 생성하여 Ingress에서 사용할 수 있도록 해야 합니다.

kubectl create secret tls tls-secret --cert=cert.pem --key=key.pem

cert.pemkey.pem은 도메인 인증서 파일

 

2. Ingress 리소스에서 tls 섹션을 추가하여 HTTPS를 활성화해야 합니다.

spec.tls 항목에 tls-secret을 지정하여 TLS 설정

 

3. HTTP 요청이 들어오면 HTTPS로 자동 리디렉션하도록 설정해야 합니다.

nginx.ingress.kubernetes.io/force-ssl-redirect: "true" 어노테이션 추가

 


✅ 정답 Manifest (TLS 적용된 Ingress 설정)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: secure-ingress  # Ingress 리소스 이름
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"  # HTTP → HTTPS 자동 리디렉션
spec:
  tls:
  - hosts:
    - example.com  # HTTPS를 적용할 도메인
    secretName: tls-secret  # TLS 인증서가 저장된 Secret

  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-service  # 트래픽을 전달할 서비스
            port:
              number: 80

 

 


📌 적용 후 예상 결과 값

 

1. TLS Secret 생성 확인

kubectl get secrets

 

💡 예상 출력 값

NAME          TYPE                DATA   AGE
tls-secret    kubernetes.io/tls    2      5s

 

2. Ingress 생성 확인

kubectl get ingress

 

💡 예상 출력 값

NAME             CLASS    HOSTS          ADDRESS         PORTS     AGE
secure-ingress   nginx    example.com    203.0.113.50    80, 443   5s

 

3. HTTPS로 서비스 접근 테스트

curl -k https://example.com

 

💡 예상 출력 값

<!DOCTYPE html>
<html>
<head><title>Welcome to nginx!</title></head>
<body>
<h1>Welcome to nginx!</h1>
</body>
</html>

 

4. HTTP 요청이 HTTPS로 리디렉션되는지 확인

curl -I http://example.com

 

💡 예상 출력 값

HTTP/1.1 308 Permanent Redirect
Location: https://example.com/

 

 


2️⃣ Ingress 보안 강화 (Redirect, CORS, Rate Limit 설정)

 

❓ 문제 상황

 

운영팀에서 Ingress 트래픽을 보다 안전하게 보호하기 위한 추가 설정이 필요합니다.

보안 강화를 위해 다음과 같은 기능을 적용해야 합니다.

HTTP 요청을 자동으로 HTTPS로 리디렉션해야 합니다.

CORS(Cross-Origin Resource Sharing) 설정을 적용해야 합니다.

특정 클라이언트의 과도한 요청을 차단하기 위해 Rate Limit을 설정해야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. HTTP → HTTPS 리디렉션을 활성화해야 합니다.

nginx.ingress.kubernetes.io/force-ssl-redirect: "true"

2. CORS 설정을 적용하여 특정 도메인만 허용해야 합니다.

nginx.ingress.kubernetes.io/enable-cors: "true"

nginx.ingress.kubernetes.io/cors-allow-origin: "https://allowed-origin.com"

3. Rate Limit을 설정하여 특정 클라이언트의 과도한 요청을 방지해야 합니다.

nginx.ingress.kubernetes.io/limit-rps: "10" (초당 10개 요청 제한)

 


✅ 정답 Manifest (보안 설정이 적용된 Ingress)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: secure-ingress-advanced  # Ingress 리소스 이름
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"  # HTTP → HTTPS 자동 리디렉션
    nginx.ingress.kubernetes.io/enable-cors: "true"  # CORS 활성화
    nginx.ingress.kubernetes.io/cors-allow-origin: "https://allowed-origin.com"  # 허용할 도메인
    nginx.ingress.kubernetes.io/limit-rps: "10"  # 초당 요청 제한
spec:
  tls:
  - hosts:
    - example.com
    secretName: tls-secret

  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-service
            port:
              number: 80

 

 


📌 적용 후 예상 결과 값

 

1. Ingress 생성 확인

kubectl get ingress

 

💡 예상 출력 값

NAME                        CLASS    HOSTS          ADDRESS         PORTS     AGE
secure-ingress-advanced     nginx    example.com    203.0.113.50    80, 443   5s

 

2. HTTPS로 서비스 접근 테스트

curl -k https://example.com

 

💡 예상 출력 값

<!DOCTYPE html>
<html>
<head><title>Welcome to nginx!</title></head>
<body>
<h1>Welcome to nginx!</h1>
</body>
</html>

 

3. CORS 설정 확인

curl -I -H "Origin: https://allowed-origin.com" https://example.com

 

💡 예상 출력 값

Access-Control-Allow-Origin: https://allowed-origin.com

 

4. Rate Limit 확인 (초당 10개 이상 요청 시 차단)

for i in {1..15}; do curl -s https://example.com; done

 

💡 예상 출력 값

429 Too Many Requests

 

728x90