앞에 kubeflow를 활성화 시킨 내역을 보면 마지막에 대시보드에 접근하는 url과 계정등에 대한 정보를 제공하는데 이를 사용하여 대시보드에 접근하자. 다만 url이 k8s내부의 네트워크의 주소이므로 이를 접근할 추가적인 작업이 필요하다. 1) 네트워크간 통신에 접근이 가능한 곳에서 접근하거나 (대표적으로 확인하는 pod를 띄움.. 등..), 2) ingress등 외부에서 접속할 구조를 넣어주거나, 3) k8s의 노드포트 기능을 사용하여 접근... 등 몇가지 가능한 시나리오가 있지만 간단하게 하기위해 노드포트를 사용해서 접근하도록 하자.
다음 명령을 통해 서비스를 편집하자
siim@u20-dev:~$ microk8s.kubectl edit svc -n kubeflow kubeflow-dashboard
아래와 같이 spec.type을 NodePort로 바꿔주자.
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
annotations:
controller.juju.is/id: c678aace-3302-4c30-8c00-3d98e44ac85e
model.juju.is/id: 6a267d85-223e-445c-8234-0df0c2ab031b
creationTimestamp: "2022-01-12T03:06:24Z"
labels:
app.kubernetes.io/managed-by: juju
app.kubernetes.io/name: kubeflow-dashboard
name: kubeflow-dashboard
namespace: kubeflow
resourceVersion: "174967"
selfLink: /api/v1/namespaces/kubeflow/services/kubeflow-dashboard
uid: 80ae42bf-1ea8-46c1-9a2b-97fe09233536
spec:
clusterIP: 10.152.183.133
clusterIPs:
- 10.152.183.133
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: ui
port: 8082
protocol: TCP
targetPort: 8082
selector:
app.kubernetes.io/name: kubeflow-dashboard
sessionAffinity: None
type: NodePort #ClusterIP
status:
loadBalancer: {}
조회를 하면 열려진 노드포트를 확인할 수 있다. (예시에서는 32038 이 할당되었고 이를 사용할 것이다. 실행시마다 포트가 바뀌므로 맞는 포트를 통해 접근해야 한다.)
siim@u20-dev:~$ microk8s.kubectl edit svc -n kubeflow kubeflow-dashboard
service/kubeflow-dashboard edited
siim@u20-dev:~$ microk8s.kubectl get svc -n kubeflow kubeflow-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubeflow-dashboard NodePort 10.152.183.133 <none> 8082:32038/TCP 140m
앞에서 수집한 정보를 통해 브라우져로 접근할 수 있다. ( http://리눅스서버IP:32038/ )
하지만 Home 외 모든 페이지들이 아래와같이 유효하지 않은 페이지로 연결되면서 문제가 발생했다.