Traefik middleware를 이용한 접근 제한

Page content

특정 서비스를 외부에 공개하고 싶지 않고, 내부 망에서만 접근하게 하려면 Traefik의 middleware가 제공하는 ipWhilteList 기능을 활용할 수 있다.

(이름은 요즘 추세에 맞게 ipAllowList 정도로 변경되어야 할 것 같은데..)

전체적인 동작은 IpWhitelist - Traefik 페이지에 있는 그림으로 간단하게 요약이 가능할 듯. 사이트에 접근하려는 client가 미리 정의된 list에 있는 경우에만 접근을 허용한다는.

middleware 정의

접근을 허용할 client들의 CIDR을 정의한다. 특정 subnet을 정의하거나, 특정 host를 정의할 수 있다. 당연히 복수 정의도 가능하고.

아래 예는 192.168.0.0/16 에서의 접근만 허용하는 설정이다.

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: ipwhitelist
spec:
  ipWhiteList:
    sourceRange:
      - 192.168.0.0/16

ingress route 정의

Middleware가 특정 match마다 적용할 수 있으므로, 위에서 정의한 접근 목록 역시 특정 site 마다 정의할 수 있다. 아래는 / 페이지에 접근하는 client를 list에서 확인해서 포함된 경우에만 허용한다.

    - match: PathPrefix(`/`)
      kind: Rule
      services:
      - name: jellyfin
        port: 80
      middlewares:
      - name: ipwhitelist
        namespace: default

이제 / 경로의 접근은 192.168.0.0/16에서만 허용되고, 그 외부에서의 접근은 허용되지 않게 된다.