쿠버네티스 1.30.5버전에서 테스트 하였습니다.
버그(?) 현상이 있어 계속 확인 중인데, RBAC, AuthorizationPolicy, OAuth2-proxy등 엮인게 많아 거의 포기 상태입니다..너무 어려워ㅠ…
사전 준비
- 쿠버네티스 클러스터가 필요합니다.
- 베어메탈 환경에서 사용할 HAProxy가필요합니다(NodePort & TLS Terminated로 사용).
- 클러스터가 사용할 수 있는 기본 설정된 동적 스토리지 클래스가 필요합니다.
gpu-operator를 배포후 Taint가 남아있다면 제외한다.
POD 스케줄을 고려하여 제외하여 배포.
kubectl taint node tk8s-gpu nvidia.com/gpu=present:NoSchedule-
Kubeflow 설치
git에서 소스를 다운 받는다.
git clone https://github.com/kubeflow/manifests.git
노드 사전 작업
이 설정은 많은 수의 pod를 처리할 수 있도록 Linux 커널의 파일 시스템 알림 제한값을 조정하는 것
sudo sysctl fs.inotify.max_user_instances=2280
sudo sysctl fs.inotify.max_user_watches=1255360
재부팅하면 값이 초기화 되므로 영구적용하려면 아래와 같은 방법으로 해야한다.
/etc/sysctl.conf 파일 적용필요.
맨 아래에 다음 줄을 추가하여 설정 합니다.
fs.inotify.max_user_instances=2280
fs.inotify.max_user_watches=1255360
NodePort변경
~/manifests/common/istio-1-22/istio-install/base/patches/service.yaml
apiVersion: v1
kind: Service
metadata:
name: istio-ingressgateway
namespace: istio-system
spec:
#type: ClusterIP
ports:
- name: status-port
nodePort: 30110
port: 15021
protocol: TCP
targetPort: 15021
- name: http2
nodePort: 30111
port: 80
protocol: TCP
targetPort: 8080
- name: https
nodePort: 30112
port: 443
protocol: TCP
targetPort: 8443
type: NodePort
설치 명령어를 동작 시킵니다.
while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 20; done
Kubeflow 접속
NodePort로 설정한 것을 리버스프록시로 연결하거나 직접 접속합니다.
초기 접속정보는 user@example.com : 12341234 입니다.
멀쩡해 보이지만 크롬 개발자도구로 확인하면 403 Forbidden이 계속 뜨고 있습니다…
그런데 문제는 로그아웃이 안됩니다…[참고자료]
그런데 신기한것은 jwt토큰은 확인이됩니다. 로그아웃버튼을 누르면 삭제되구요…
토큰 확인은 크롬 개발자도구 > Application > Cookies에서 확인 할 수 있습니다.
추가 테스트 내용
아래 내용들은 로그아웃 버튼이 동작하지 않아 리다이렉트를 해보려고 시도했던 내용들 입니다….
결론은 아직 해결하지 못하였습니다.
초기 비밀번호 교체(추가 검토 필요. 참고용으로만 사용)
비밀번호 교체는 추가 확인이 더 필요합니다. 참고용으로만 사용 바랍니다.
비밀번호 생성 초기 설정을 위한 비밀번호를 새로 생성합니다.
아래 코드를이용하여 스크립트 작성후 실행하여 해시값을 얻습니다.
#!/usr/bin/python3
from passlib.hash import bcrypt;
import getpass;
print(bcrypt.using(rounds=12, ident="2y").hash(getpass.getpass()))
~/manifests/common/dex/base/dex-passwords.yaml의 내용에서 비밀번호를 교체합니다.
이름정보 교체
~/manifests/common/dex/base/config-map.yaml의 내용 중 email과 username을 교체합니다.
~/manifests/common/dex/overlays/oauth2-proxy/config-map.yaml
~/manifests/common/user-namespace/base/params.env 내용을 교체합니다.
로그아웃 이슈 테스트 과정
아래 내용 말고도 여러 테스트를 해보았으나 모두 실패하였습니다…
결론은 centraldashboard접근 부터 403 forbidden 오류가 발생하는 것으로 추측할때 권한 이슈가 있기는 한 것 같은데 어디를 손봐야 할지 감이 안잡합니다…단순히 / 로 접근하면 OAuth-Proxy인증 페이지가나오는데 이때도 403 에러는 존재합니다. 그리고 로그아웃을 누르면 리다이렉트 처리가 되긴 하였으나 OAuth-Proxy인증 페이지가 안보이는 것 으로 추측 됩니다.
크롭 개발자 도구에서 추적해보면 리다이렉트로 / 로 넘겨주었으나 페이지가 변하지 않습니다.
AuthorizationPolicy설정
kubectl get authorizationpolicy -n istio-system istio-ingressgateway-require-jwt -o yaml
토큰 오류가 보여서 변경해봤는데 음…이것도 아닌듯
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
annotations:
name: istio-ingressgateway-require-jwt
namespace: istio-system
spec:
action: DENY
rules:
- from:
- source:
requestPrincipals: ["*"]
to:
- operation:
notPaths:
- /*
selector:
matchLabels:
app: istio-ingressgateway
AuthorizationPolicy 전체허용
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: allow-all
namespace: ${name}
spec:
rules:
- {}
x-forward-for 테스트
헤더값 확인을 좀 해보려고 httpbin을이용해서 테스트도 해보았으나 마땅히 해결이 되지 않음….
# 테스트 주소형식
https://httpbin.example.com/get?show_env
oauth2-proxy설정변경테스트
모두 실패…
kubectl edit cm -n oauth2-proxy oauth2-proxy-hk55gm96k4
https://dex.auth.svc.cluster.local:5556/dex/logout?redirect_uri=https://kubeflow.itstant.com/"
https://kubeflow.itstant.com/oauth2/sign_out?rd=https://kubeflow.itstant.com/
dex 설정 변경
모두 실패…
kubectl edit -n auth cm dex
redirect:
authority: kubeflow.itstant.com
scheme: https
uri: /oauth2/sign_out?rd=https://kubeflow.example.com/
참고자료
No | Text | Link | Remark |
---|---|---|---|
1 | Perform proper logout for Oauth2-Proxy | link | 이슈 |
2 | Support regular OIDC logout from the central dashboard | link | 이슈 |
3 | dex말고 keycloak으로 대체하는 방법 | link | 해봐야 하는 것 |
4 | install & http settings | link | 테스트 환경과 무관한 설정 |
5 | 인증우회 | link | 오래된 자료라 해보지 않음 |
6 | virtualservice 수정방법 | link | OAuth2-proxy로 바뀌어서 안됨 |
7 | cert-manager 를 이용한 https설정 | link | 본인 환경과 다르므로 미적용, 본인 환경에 적용시 HAProxy 뒤에 설정하는 방식 적용 |
1.7 버전 로그아웃 리다이렉트 방법
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: authservice-logout
namespace: istio-system
spec:
gateways:
- kubeflow/kubeflow-gateway
hosts:
- '*'
http:
- match:
- uri:
prefix: /authservice/site/after_logout
rewrite:
uri: /
route:
- destination:
host: authservice.istio-system.svc.cluster.local
port:
number: 8080