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 서버는 HTTP
2개의 포트에서 서비스를 제공합니다.
localhost port:
- 테스트 및 부트스트랩과 마스터 노드(스케줄러, 컨트롤러 관리자)의 다른 구성 요소가 API와 통신하기 위한 것입니다.
- TLS 없음
- 안전하지 않은 http 연결 비활성화: 기본값은 포트 8080이며
--insecure-port
플래그로 변경합니다. (다음으로 비활성화할 수 있습니다--insecure-port=0
)- 기본 IP는 입니다 . 플래그
localhost
로 변경하세요 .--insecure-bind-address
(제거하다--insecure-bind-address
)- 요청은 인증 및 권한 부여 모듈을 우회합니다.
- 승인 제어 모듈에 의해 처리되는 요청입니다.
- 호스트 액세스가 필요하여 보호됨
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를 보호하는 방법