본문 바로가기
kubernetes

Pod forbidden sysctl: "net.ipv4.tcp_fastopen" not whitelisted

by tango0415 2021. 7. 27.

요구사항

kubernetes 기반 어플리케이션 개발을 할때, 로컬 개발환경 구축을 위해 minikube를 사용합니다.

이때 어플리케이션에 따라서 pod, container 내부에서 커널 파라미터를 조정해야 하는 경우가 있습니다.

여기선 TCP 커넥션과 관련된 아래 세가지 커널 파라미터를 조정할 필요가 있었습니다.

  • net.ipv4.ip_local_port_range
  • net.ipv4.tcp_fastopen
  • net.ipv4.tcp_tw_reuse

 

문제 상황

커널 파라미터 조정을 위해 yaml 파일에 아래와 같이 선언하였습니다.

apiVersion: apps/v1
kind: Deployment
spec:
template:
  spec:
    securityContext:
      sysctls:
        - name: net.ipv4.ip_local_port_range
          value: 15000       64000
        - name: net.ipv4.tcp_fastopen
          value: "3"
        - name: net.ipv4.tcp_tw_reuse
          value: "1"

하지만 minikube 환경에 deployment 배포를 해보면 해당 옵션들의 변경이 허용되지 않는 경우가 있습니다.

 

> kubectl apply -f deployment.yaml
> kubectl describe pod ${podName}
...

Status:         Failed
Reason:         SysctlForbidden
Message:       Pod forbidden sysctl: "net.ipv4.tcp_fastopen" not whitelisted

...

Events:
Type     Reason           Age   From               Message
 ----     ------           ----  ----               -------
Warning SysctlForbidden 27s   kubelet           forbidden sysctl: "net.ipv4.tcp_fastopen" not whitelisted
Normal   Scheduled       27s   default-scheduler Successfully assigned default/... to minikube

 

해결 방법

Pod 내에서 변경할 수 있는 커널 파라미터가 제한되어 있고, 어떤 것들은 minikube 클러스터 구성시에 명시적으로 허용해주어야 합니다.

> minikube start --driver=docker --extra-config="kubelet.allowed-unsafe-sysctls=net.ipv4*"

 

추가적으로 minikube 환경에 배포된 어플리케이션을 테스트하기 위해서는 로컬에서 접근할 수 있는 endpoint가 있어야 합니다. Service 타입을 NodePort로 배포하고, minikube의 service-node-port 파라미터를 선언해주면 일정 범위의 port가 할당되어 테스트를 쉽게 진행할 수 있습니다.

 

> minikube start --driver=docker --extra-config="kubelet.allowed-unsafe-sysctls=net.ipv4*" --extra-config="apiserver.service-node-port-range=32760-32767" --ports=127.0.0.1:32760-32767:32760-32767
> helm install springboot-demo
> curl localhost:$(kubectl get services -o=json |jq '.items[0].spec.ports[0].nodePort')/actuator/health/liveness

 

 

 

참고