Open utterances-bot opened 2 years ago
아래와 같이 파일이 있음에도 불구하고 에러가 발생하는데 혹 잘못 설정한 부분이 있을까요?
root@master:~/temp/ProxyAuth# docker run -p 8443:443 -v $(pwd):/etc/nginx/conf.d nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: /etc/nginx/conf.d/default.conf differs from the packaged version
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2021/07/22 08:38:59 [emerg] 1#1: cannot load certificate "/etc/kubernetes/pki/front-proxy-client.crt": BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/kubernetes/pki/front-proxy-client.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)
nginx: [emerg] cannot load certificate "/etc/kubernetes/pki/front-proxy-client.crt": BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/kubernetes/pki/front-proxy-client.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)
root@master:~/temp/ProxyAuth# ls -al /etc/kubernetes/pki/front-proxy-client.crt
-rw-r--r-- 1 root root 1103 4월 2 16:59 /etc/kubernetes/pki/front-proxy-client.crt
==============================================================================
root@master:~/temp/ProxyAuth# cat default.conf
server {
listen 443 ssl;
server_name localhost;
# Proxy Server Cert
ssl_certificate /etc/nginx/conf.d/server.pem;
ssl_certificate_key /etc/nginx/conf.d/server-key.pem;
# Proxy auth
auth_basic "basic auth";
auth_basic_user_file /etc/nginx/conf.d/auth;
location / {
proxy_pass https://192.168.137.10:6443;
# Proxy Client Cert
proxy_ssl_certificate /etc/kubernetes/pki/front-proxy-client.crt;
proxy_ssl_certificate_key /etc/kubernetes/pki/front-proxy-client.key;
# Proxy header
proxy_set_header X-Remote-User $remote_user;
proxy_set_header X-Remote-Group system:masters;
# API server CA
proxy_ssl_trusted_certificate /etc/kubernetes/pki/ca.crt;
proxy_ssl_name kubernetes;
proxy_ssl_verify on;
}
}
@taekou 님, root@master
가 host 서버인거죠? 그렇다면 아마 볼륨 마운트가 안되어 있어서 그런 것 같습니다. 다음과 같이 한번 실행해 보시겠어요?
docker run -p 8443:443 -v /etc/kubernetes:/etc/kubernetes -v $(pwd):/etc/nginx/conf.d nginx
안녕하세요! 프록시 인증 방식 적용에 참고가 되었습니다. 감사합니다 !
다만, 한가지 문의사항이 있습니다. kubeconfig의 user에 username, password를 설정하고 kubectl 명령을 실행하면 프록시 서버로 Authorization 헤더가 전달 안되는 것으로 보이는데요. 혹시, 관련해서 해결 방법이 있을까요?
테스트한 내용은 아래와 같습니다.
첫 번째는 kubectl 요청이고, 두 번째는 curl 요청으로 남은 nginx access log 입니다. 타임스탬프 왼쪽에 $remote_user 를 로깅하고 있는데, 첫 번째는 전달 받은게 없고, 두 번째 요청만 계정 이름이 전달 되었습니다.
1.1.1.1 - - [16/Jan/2024:21:21:06 +0900] "GET /api/v1/namespaces/kube-system/services?labelSelector=kubernetes.io%2Fcluster-service%3Dtrue HTTP/1.1" 200 95 "-" "kubectl/v1.26.12 (darwin/arm64) kubernetes/df63cd7" "-"
1.1.1.1 - user [16/Jan/2024:21:22:01 +0900] "GET /api/v1/namespaces/default/pods?limit=500 HTTP/1.1" 200 116 "-" "curl/8.1.2" "-"
kubectl 명령에서 사용한 kubeconfig 파일은 아래와 같습니다.
apiVersion: v1
kind: Config
clusters:
- cluster:
server: http://<PROXY_ADDR>
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: user
name: user@kubernetes
users:
- name: user
user:
username: user
password: passwd
current-context: user@kubernetes
preferences: {}
curl로 테스트한 명령은 아래와 같습니다.
curl -v -H "Authorization: Basic $(echo -n user:passwd | base64)" 'http://<PROXY_ADDR>/api/v1/namespaces/default/pods?limit=500'
안녕하세요. @skyoo2003 님.
아마도 https
설정이 안되어서 그런게 아닐까 의심되는데요. 이렇게 한번 실행해 보시겠어요?
apiVersion: v1
kind: Config
clusters:
- cluster:
insecure-skip-tls-verify: true # 추가
server: https://<PROXY_ADDR> # http --> https
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: user
name: user@kubernetes
users:
- name: user
user:
username: user
password: passwd
current-context: user@kubernetes
preferences: {}
아울러 실행하실 때 -v 9
옵션을 추가해주시면 조금 더 상세한 정보가 나옵니다.
kubectl cluster-info -v 9
# xxx loader.go:395] Config loaded from file: kubeconfig
# xxx round_trippers.go:466] curl -v -XGET -H "User-Agent: kubectl/v1.28.3 (xx) kubernetes/a8a1abc" -H "Accept: application/json;g=apidiscovery.k8s.io;v=v2beta1;as=APIGroupDiscoveryList,application/json" -H "Authorization: Basic <masked>" 'https://xxx/api?timeout=32s'
Authorization: Basic <masked>
가 출력되는지 확인
k8s 인증 완벽이해 #5 - Proxy 인증 | 커피고래의 노트
쿠버네티스 인증 완벽 이해 시리즈 5탄, Proxy를 통한 쿠버네티스 인증에 대해서 살펴보는 시간을 가져 보겠습니다.
https://coffeewhale.com/kubernetes/authentication/proxy/2020/05/06/auth05/