성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
[정성태] Modules 창(Ctrl+Shift+U)을 띄워서, 해당 Op...
[정성태] 만드실 수 있습니다. 단지, Unity 엔진 내의 스크립트와 W...
[공진영] 안녕하세요 좋은글 감사합니다. 현재 제가 wpf로 관제 모...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>Docker Desktop for Windows - k8s dashboard의 Kubeconfig 로그인 및 Skip 방법</h1> <p> Kubernetes 대시보드를 사용하는 경우,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Docker Desktop for Windows를 위한 k8s 대시보드 활성화 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/12567'>https://www.sysnet.pe.kr/2/0/12567</a> </pre> <br /> 로그인 방법이 "Token"과 "Kubeconfig" 2가지로 나뉩니다. 우선 Token의 경우 "<a target='tab' href='https://www.sysnet.pe.kr/2/0/12566#get_service_token'>Kubernetes - kube-apiserver와 REST API 통신하는 방법 (Docker Desktop for Windows 환경)</a>" 글에서 설명했고, 매우 긴 token으로 매번 로그인 시 불편하다는 점이 있습니다. (사실, 웹 브라우저가 비밀번호를 저장해 주므로 다시 입력할 필요가 없어 현실적으로 딱히 불편하지는 않습니다. ^^)<br /> <br /> 그리고 Kubeconfig은 당연히 "%USERPROFILE%\.kube\config" 파일을 지정해 로그인하는 건데요, 일단 기본적으로는 아무 설정을 하지 않은 경우 해당 파일을 선택하면 다음과 같이 오류가 발생합니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='k8s_dashboard_kubeconfig_1.png' src='/SysWebRes/bbs/k8s_dashboard_kubeconfig_1.png' /><br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Internal error (500): Not enough data to create auth info structuure. </pre> <br /> 왜냐하면 이것 역시 같은 토큰이 kubeconfig 파일에 등록되어 있어야 하기 때문입니다. 이를 위해, "<a target='tab' href='https://www.sysnet.pe.kr/2/0/12566#get_service_token'>Kubernetes - kube-apiserver와 REST API 통신하는 방법 (Docker Desktop for Windows 환경)</a>"에서 설명한 방법에 따라 토큰을 구하거나,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > c:\temp> <span style='color: blue; font-weight: bold'>kubectl get secrets</span> NAME TYPE DATA AGE default-token-qnwbl kubernetes.io/service-account-token 3 50d c:\temp> <span style='color: blue; font-weight: bold'>kubectl describe secret default-token-qnwbl</span> Name: default-token-qnwbl Namespace: default Labels: <none> Annotations: kubernetes.io/service-account.name: default kubernetes.io/service-account.uid: 6a8f5d0c-db54-4018-b060-f311583546c0 Type: kubernetes.io/service-account-token Data ==== namespace: 7 bytes token: <span style='color: blue; font-weight: bold'>eyJhbGciOiJSUzI...[생략]...lzn1lGmAh1w</span> ca.crt: 1025 bytes </pre> <br /> kube-system의 default 토큰 값을 간단하게 다음의 명령으로 구해,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > c:\temp> <span style='color: blue; font-weight: bold'>kubectl -n kube-system describe secret default | findstr token:</span> token: <span style='color: blue; font-weight: bold'>eyJhbGciOiJSUzI...[생략]...k89OlpNbpww</span> </pre> <br /> 저 값을 아래의 명령어에 --token 인자로 전달, 실행하면 %USERPROFILE%\.kube\config 파일에 설정됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > c:\temp> <span style='color: blue; font-weight: bold'>kubectl config set-credentials docker-desktop --token="eyJhbGciOiJSUzI...[생략]...lzn1lGmAh1w"</span> User "docker-desktop" set. </pre> <br /> 위에서 "set-credentials"의 인자로 전달된 "docker-desktop"은 docker desktop for windows가 구성한 "%USERPROFILE%\.kube\config" 파일에 있는 사용자 이름이 그렇게 설정되어 있기 때문에 그에 맞춘 것입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > c:\temp> <span style='color: blue; font-weight: bold'>type "%USERPROFILE%\.kube\config" | findstr /C:"\- name"</span> - name: <span style='color: blue; font-weight: bold'>docker-desktop</span> </pre> <br /> 실행 후 %USERPROFILE%\.kube\config 파일을 확인해 보면 다음과 같이 users의 docker-desktop 항목에 "token: eyJhbG...[생략]...bpww" 필드가 나옵니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0t...[생략]...tLQo= server: https://kubernetes.docker.internal:6443 name: docker-desktop contexts: - context: cluster: docker-desktop user: docker-desktop name: docker-desktop current-context: docker-desktop kind: Config preferences: {} users: <span style='color: blue; font-weight: bold'>- name: docker-desktop</span> user: client-certificate-data: LS0tL...[생략]...0tLS0K client-key-data: LS0...[생략]...LQo= <span style='color: blue; font-weight: bold'>token: eyJhbG...[생략]...bpww</span> </pre> <br /> (그러니까, 그냥 단순하게 %USERPROFILE%\.kube\config 파일을 메모장으로 열어 "token: eyJhbG...[생략]...bpww" 문자열을 추가하고 저장해도 됩니다.)<br /> <br /> 이렇게 바뀐 %USERPROFILE%\.kube\config 파일을 다시 대시보드 로그인 화면에서 선택하고 "Sign in" 버튼을 누르면 로그인이 잘 됩니다. ^^<br /> <br /> (참고로, 위에서 설정한 복잡한 방법을 "<a target='tab' href='https://github.com/stjeong/Utilities/releases'>ukubectl.exe</a> --set-default-token" 명령어를 사용하면 간단하게 kubeconfig 파일에 token 값이 설정됩니다.)<br /> <br /> <hr style='width: 50%' /><br /> <a name='token_skip'></a> <br /> 그런데, docker desktop의 특성상 로컬에서 개발 목적으로 테스트하는 환경이라면 로그인을 매번 하는 것이 귀찮습니다. 그리고 이걸 생략하는 방법을 제공하는데요,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Bypassing authentication for the local Kubernetes Cluster Dashboard ; <a target='tab' href='https://devblogs.microsoft.com/premier-developer/bypassing-authentication-for-the-local-kubernetes-cluster-dashboard/'>https://devblogs.microsoft.com/premier-developer/bypassing-authentication-for-the-local-kubernetes-cluster-dashboard/</a> </pre> <br /> 위의 글을 정리해 보면, <a target='tab' href='https://www.sysnet.pe.kr/2/0/12567'>지난 글에서 설치한 대시보드</a> 명령어 파일을,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > kubectl apply -f <span style='color: blue; font-weight: bold'>https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml</span> </pre> <br /> 내려받아,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Invoke-WebRequest -Uri https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml -OutFile kubernetes-dashboard.yaml </pre> <br /> 편집기로 열어 "name: kubernetes-dashboard" 값을 갖는 "kind: Deployment" 섹션의 containers.args에 다음의 2 가지 옵션을 추가합니다. (yaml 파일의 195 라인)<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > --enable-skip-login --disable-settings-authorizer </pre> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > ...[생략]... <span style='color: blue; font-weight: bold'>kind: Deployment</span> apiVersion: apps/v1 metadata: labels: k8s-app: kubernetes-dashboard <span style='color: blue; font-weight: bold'>name: kubernetes-dashboard</span> namespace: kubernetes-dashboard spec: replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: k8s-app: kubernetes-dashboard template: metadata: labels: k8s-app: kubernetes-dashboard spec: <span style='color: blue; font-weight: bold'>containers:</span> - name: kubernetes-dashboard image: kubernetesui/dashboard:v2.2.0 imagePullPolicy: Always ports: - containerPort: 8443 protocol: TCP <span style='color: blue; font-weight: bold'>args:</span> - --auto-generate-certificates - --namespace=kubernetes-dashboard <span style='color: blue; font-weight: bold'>- --enable-skip-login - --disable-settings-authorizer</span> # Uncomment the following line to manually specify Kubernetes API server Host # If not specified, Dashboard will attempt to auto discover the API server and connect # to it. Uncomment only if the default does not work. ...[생략]... </pre> <br /> 저장 후, 다시 변경 사항을 반영해 주면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > c:\temp> <span style='color: blue; font-weight: bold'>kubectl apply -f .\kubernetes-dashboard.yaml</span> namespace/kubernetes-dashboard unchanged serviceaccount/kubernetes-dashboard unchanged service/kubernetes-dashboard unchanged secret/kubernetes-dashboard-certs unchanged secret/kubernetes-dashboard-csrf configured Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply secret/kubernetes-dashboard-key-holder configured configmap/kubernetes-dashboard-settings unchanged role.rbac.authorization.k8s.io/kubernetes-dashboard unchanged clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard unchanged rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard unchanged clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard unchanged deployment.apps/kubernetes-dashboard configured service/dashboard-metrics-scraper unchanged deployment.apps/dashboard-metrics-scraper unchanged </pre> <br /> 이후 로그인 화면에 다음과 같이 "Skip" 버튼이 생기고,<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='k8s_dashboard_kubeconfig_2.png' src='/SysWebRes/bbs/k8s_dashboard_kubeconfig_2.png' /><br /> <br /> Token, kubeconfig에 상관없이 그냥 skip 버튼을 누르면 dashboard 사용이 가능합니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
8436
(왼쪽의 숫자를 입력해야 합니다.)