Kubeflow 1.9 배포방법

쿠버네티스 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/

참고자료

NoTextLinkRemark
1Perform proper logout for Oauth2-Proxylink이슈
2Support regular OIDC logout from the central dashboardlink이슈
3dex말고 keycloak으로 대체하는 방법link해봐야 하는 것
4install & http settingslink테스트 환경과 무관한 설정
5인증우회link오래된 자료라 해보지 않음
6virtualservice 수정방법linkOAuth2-proxy로 바뀌어서 안됨
7cert-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