kube apiserver에 대한 kubectl 안전하지 않은 승인을 비활성화하는 방법

kube apiserver에 대한 kubectl 안전하지 않은 승인을 비활성화하는 방법

https가 아닌 요청이 통과하는 것을 방지하기 위해 마스터 서버-API를 더욱 안전하게 만들려고 노력하고 있습니다.

구성 샘플:

$ kubectl config view
apiVersion: v1
clusters:
- cluster:
    server: https://ip:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token: REDACTED

올바른 CA를 사용하는 한 작동합니다.

내 문제는 CA를 제거하거나 CA가 잘못되어 단순히 플래그를 적용하는 경우에도 작동한다는 것입니다 --insecure-skip-tls-verify.

Server-API에서 http 대신 https 연결을 허용하도록 서버를 강제하려면 어떻게 해야 합니까?

익명 요청도 비활성화했습니다.익명 요청하지만 여전히 요청이 통과될 수 있다는 것을 알 수 있습니다.

답변1

내 문제는 CA를 제거하거나 잘못된 CA가 있고 단순히 --insecure-skip-tls-verify 플래그를 적용하는 경우에도 작동한다는 것입니다.

사용이 --insecure-skip-tls-verify매우권장되지 않음생산 환경에서. 로컬 테스트를 원할 때나 학습 목적으로 사용할 수 있습니다.

~ 안에Kubectl정보가 있는 문서:

--insecure-skip-tls-verify

If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure

따라서 이 플래그가 true로 설정되면 항상 인증서를 건너뛰고 서버의 ID가 전혀 확인되지 않습니다. 그것은 비슷하다curl -k

-k, --insecure
              (TLS) By default, every SSL connection curl makes is verified to
              The  server  connection  is verified by making sure the server's
              interface name, IP address or host name.

다양한 방법으로 클러스터를 보호할 수 있지만 시나리오에 따라 다릅니다. 그러나 몇 가지 주요 사항이 있습니다.API 서버 포트 및 IP개념:

SecurePort 사용

기본적으로 Kubernetes API 서버는 HTTP2개의 포트에서 서비스를 제공합니다.

  1. localhost port:
  • 테스트 및 부트스트랩과 마스터 노드(스케줄러, 컨트롤러 관리자)의 다른 구성 요소가 API와 통신하기 위한 것입니다.
  • TLS 없음
  • 안전하지 않은 http 연결 비활성화: 기본값은 포트 8080이며 --insecure-port플래그로 변경합니다. (다음으로 비활성화할 수 있습니다 --insecure-port=0)
  • 기본 IP는 입니다 . 플래그 localhost로 변경하세요 . --insecure-bind-address(제거하다 --insecure-bind-address)
  • 요청은 인증 및 권한 부여 모듈을 우회합니다.
  • 승인 제어 모듈에 의해 처리되는 요청입니다.
  • 호스트 액세스가 필요하여 보호됨
  1. Secure port:
  • 가능할 때마다 사용하십시오. 보안 포트 활성화:
  • TLS를 사용합니다. 플래그를 사용하여 인증서 --tls-cert-file와 키를 설정합니다 --tls-private-key-file.
  • 기본값은 port 입니다 6443. - -secure-port플래그로 변경하세요.
  • 기본 IP는 첫 번째 non-localhost네트워크 인터페이스 이며 --bind-address플래그로 변경됩니다.
  • 인증 및 권한 부여 모듈에 의해 처리되는 요청입니다.
  • 승인 제어 모듈에 의해 처리되는 요청입니다.
  • 인증 및 권한 부여 모듈이 실행됩니다.

API 액세스 제한, 이는 특정 IP 또는 특정 IP 범위(승인된 네트워크)에서만 API에 대한 액세스를 허용해야 함을 의미합니다. 외부 세계에서 접근할 수 없어야 합니다. 이를 수행하려면 방화벽 규칙을 사용하거나네트워크 정책.

끄다익명 요청, 당신은 이미 그랬습니다.

을 살펴볼 수 있지만 --insecure-port=0최신 버전에서는 더 이상 사용되지 않습니다.

추가 정보로 확인해 보시기 바랍니다.Kubernetes의 어려운 방법, 특히 3개 장: Provisioning Compute Resources, Provisioning the CA and Generating TLS Certificates, Generating Kubernetes Configuration Files for Authentication. 여기에서 몇 가지 모범 사례를 찾을 수 있습니다.

Kube API-server찾을 수 있는 플래그 에 대한 아주 좋은 설명이 기사

클러스터 보안에 대한 유용한 링크:

Kubernetes 클러스터 보안 유지의 기본 - kube-apiserver를 보호하는 방법

Kubernetes API에 대한 액세스 제어

Kubernetes 보안 모범 사례

Kubernetes 보안 101: 위험 및 29가지 모범 사례

Kubernetes API에 대한 액세스 제어

클러스터에 액세스

관련 정보