Slide 1

Slide 1 text

2020/10/21 VMware DevOps Meetup #6 @IrieMasahiro WebMKSで掴むVMコンソール

Slide 2

Slide 2 text

自己紹介 入江 正博 @IrieMasahiro • 某情報通信系企業 クラウド/インフラコンサルタント • VMUG 仮想インフラ部会 • vExpert 2019-2020

Slide 3

Slide 3 text

せっかくなのでお知らせ 開催日:2020年10月23日(金) 12:00~18:00 会場:オンライン ( Zoom ) https://VMware.zoom.us/j/98585424596 パスワードは前日までに登録された方にお知らせします. 参加費:無料 参加特典:USERCON 2020 オリジナルパーカー 登録方法:VMUG Event ページ右側の "RSVP" ボタンをクリックで参加登録できます. https://community.vmug.com/events/event-description?CalendarEventKey=1d49ee28-e059-45d1-8506-fa673ee43c8e VMUG usercon online 検 索

Slide 4

Slide 4 text

----- 閑話休題 -----

Slide 5

Slide 5 text

今更ですが… vSphere 7.0 GA! 時代は既に vSphere 7.0 U1 に突入…

Slide 6

Slide 6 text

数々のアップデート vSphere with Kubernetes vSphere LifeCycle Manager Identity Federation vSphere Trust Authority スケーラビリティ拡大 VDS 7.0 vCenter Server Upgrade Plannner DRS 改善、vMotion 改善 and more...

Slide 7

Slide 7 text

出会いがあれば別れが…

Slide 8

Slide 8 text

出会いがあれば別れが…

Slide 9

Slide 9 text

出会いがあれば別れが… ESXi からの VNC サーバの削除…

Slide 10

Slide 10 text

ESXi での VNC サーバ? • VNC クライアントで VM コンソールに接続できる TightVNC Viewer で VM コンソールに接続

Slide 11

Slide 11 text

ESXi での VNC サーバ? • VNC クライアントで VM コンソールに接続できる • ESXi 側の Firewall を gdbserver でガバッと ポート指定の Config XML を作成し、VNC 接続用のポートを開放 $ cat /etc/vmware/firewall/vnc.xml VNC outbound tcp dst 5900 5910 inbound tcp 【略】 $ esxcli network firewall refresh # GUI のファイヤウォールでサービスとして現れる。

Slide 12

Slide 12 text

ESXi での VNC サーバ? • VNC クライアントで VM コンソールに接続できる • ESXi 側の Firewall を gdbserver でガバッと ポート指定の Config XML を作成し、VNC 接続用のポートを開放 • VM の設定パラメータとして vSphere Client で追加 or vmx ファイルに追記 – RemoteDisplay.vnc.enabled = “TRUE” – RemoteDisplay.vnc.port = “接続ポート(クラスタで VMユニーク)” – RemoteDisplay.vnc.password = “接続パスワード” – RemoteDisplay.vnc.keyMap = “jp”

Slide 13

Slide 13 text

ESXi での VNC サーバ? • VNC クライアントで VM コンソールに接続できる • ESXi 側の Firewall を gdbserver でガバッと ポート指定の Config XML を作成し、VNC 接続用のポートを開放。 • VM の設定パラメータとして vSphere Client で追加 or vmx ファイルに追記 – RemoteDisplay.vnc.enabled = “TRUE” – RemoteDisplay.vnc.port = “接続ポート(クラスタで VMユニーク)” – RemoteDisplay.vnc.password = “接続パスワード” – RemoteDisplay.vnc.keyMap = “jp”

Slide 14

Slide 14 text

ESXi での VNC サーバ? • VNC クライアントで VM コンソールに接続できる • ESXi 側の Firewall を gdbserver でガバッと ポート指定の Config XML を作成し、VNC 接続用のポートを開放 • VM の設定パラメータとして vSphere Client で追加 or vmx ファイルに追記 – RemoteDisplay.vnc.enabled = “TRUE” – RemoteDisplay.vnc.port = “接続ポート(クラスタで VMユニーク)” – RemoteDisplay.vnc.password = “接続パスワード” – RemoteDisplay.vnc.keyMap = “jp” • VM 疎通は関係なく、[ESXi アドレス]:[指定したポート] で コンソール接続可能

Slide 15

Slide 15 text

ESXi での VNC サーバ? • VNC クライアントで VM コンソールに接続できる • ESXi 側の Firewall を gdbserver でガバッと ポート指定の Config XML を作成し、VNC 接続用のポートを開放 • VM の設定パラメータとして vSphere Client で追加 or vmx ファイルに追記 – RemoteDisplay.vnc.enabled = “TRUE” – RemoteDisplay.vnc.port = “接続ポート(クラスタで VMユニーク)” – RemoteDisplay.vnc.password = “接続パスワード” – RemoteDisplay.vnc.keyMap = “jp” • VM 疎通は関係なく、[ESXi アドレス]:[指定したポート] で コンソール接続可能 • vSphere Client 接続不要

Slide 16

Slide 16 text

ありがちなユースケース vSphere Client VM(コンソール) IT 管理部門 利用者部門 HTTPS SSH RDP 払い出し

Slide 17

Slide 17 text

ありがちなユースケース vSphere Client VM(コンソール) IT 管理部門 利用者部門 HTTPS SSH RDP ??? VM疎通取れなくなった! 復旧のためコンソール見たい! vSphere Client は他部門 VM も あるので渡したくない。 とは言え、こちらで復旧もやり たくないぁ… 払い出し

Slide 18

Slide 18 text

ありがちなユースケース vSphere Client VM(コンソール) IT 管理部門 利用者部門 HTTPS SSH RDP 払い出し VNC VM 疎通取れなくても作業可能 vSphere Client を渡さなくても 利用者部門で何とかなった。

Slide 19

Slide 19 text

かの有名 Product でも ※ HTML VNC Client https://github.com/novnc/noVNC 多分使っているはず…(実物までは見てない...)

Slide 20

Slide 20 text

そんな VNC サーバが vSphere 7.0 では削除

Slide 21

Slide 21 text

VNC サーバの後継としては

Slide 22

Slide 22 text

VNC サーバの後継としては 仮想マシンに VNC アクセスするユーザーは、WebSocket を介した VNC 接続を提供す る VirtualMachine.AcquireTicket ("webmks") API を使用する必要があります 。webmks チケットは、仮想マシン コンソールへの認証されたアクセスを提供します。 詳細については、『VMware HTML Console SDK のドキュメント』を参照してくだ さい。

Slide 23

Slide 23 text

WebMKS と VMware HTML Console SDK

Slide 24

Slide 24 text

WebMKS • MKS = Mouse, Keyboard, Screen の略らしい – “Unable to connect to the MKS” でおなじみ – 902 番ポート • MKS を HTTPS(WebSocket) で扱う仕組み • vSphere 5.5 以降で利用可能 • HTTPS(wss) を使っているので SSL/TLS での暗号化通信 • vSphere (Web) Client や VMware Remote Console、 Host Client での コンソール表示は WebMKS

Slide 25

Slide 25 text

やはり、かの有名 Product も vSphere 7.0 対応なので (Web)MKS へ

Slide 26

Slide 26 text

VMware HTML Console SDK • WebMKS を取り扱うための SDK (JavaScript/CSS) – https://code.vmware.com/web/sdk/2.1.0/html-console – プログラミングガイド • https://www.vmware.com/content/dam/digitalmarketing/vmwar e/ja/pdf/html-console-sdk-210-programming-guide.pdf • vSphere Client はコンソール表示にはコレを使っている – vCloud Director もコレらしい

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

実装方法 • プログラミングガイドより、基本はコレだけで動く
var wmks = WMKS.createWMKS("wmksContainer",{}) .register(WMKS.CONST.Events.CONNECTION_STATE_CHANGE, function(event,data){ if(data.state == WMKS.CONST.ConnectionState.CONNECTED){ console.log("connection state change : connected");} }); wmks.connect("【WebMKS チケット URL】");

Slide 29

Slide 29 text

実装方法 • プログラミングガイドより、基本はコレだけで動く

Slide 30

Slide 30 text

実装方法 • プログラミングガイドより、基本はコレだけで動く
var wmks = WMKS.createWMKS("wmksContainer",{}) .register(WMKS.CONST.Events.CONNECTION_STATE_CHANGE, function(event,data){ if(data.state == WMKS.CONST.ConnectionState.CONNECTED){ console.log("connection state change : connected");} }); wmks.connect("【WebMKS チケット URL】");

Slide 31

Slide 31 text

WebMKS チケット? • WebMKS 接続用 WebSocket のワンショット URL – wss://【ESXiホスト】:【ポート】/ticket/【Token的なもの】の形式 – 同じ URL への 2 回目以降の接続は 503 • vSphere API から取得 – VirtualMachine.AquireTicket(“webmks”) • *vmomi での作りこみ • govc でも可能に? (https://github.com/vmware/govmomi/issues/2083) – どうしても GUI で…という場合は MOB から • vSphere 7.0 からは REST API でも取得可能に – https://【vCenter】/rest/vcenter/【VM の MOID】/console/tickets – JavaScript で叩けばブラウザのみで完結? • そもそもブラウザから叩くのは CORS で無理っぽい… – vCSA の http サーバのレスポンスヘッダをいじれれば? (imkk • vSphere Client は見なくていいが、ログインは必要

Slide 32

Slide 32 text

実装するならこんな感じ…? 利用者 ①HTTPS WebMKS コンソール チケット取得用 自前 API vCenter/ESXi ②HTTP(S) Ticket取得 ③HTTPS Ticket取得 ⑤Ticket応答 ④Ticket応答 ⑥WebSocket WenMKS接続

Slide 33

Slide 33 text

まとめ • vSphere 7.0 から ESXi での VNC サーバが削除 – VM 利用者に vSphere Client を開放していない運用の場合は注意 • VNC 無き今、VM コンソールの取得は VMware HTML Console SDK を使った WebMKS で – WebSocket 版の MKS – JavaScript/CSS の SDK で凝らなければ接続は簡単 • WebMKS 経由の場合、WebMKS チケット取得が必要 – チケット取得のためにログインは必要 – CLI 経由で取得 or 自前で API 立ててブラウザ取得

Slide 34

Slide 34 text

EOP