k8sクラスタでグラフィカルアプリケーションを起動しています。私の設定は次のとおりです。
最初のポッドでは、XサーバーとVNCサーバーを実行します。
spec:
containers:
- name: test-x-server
image: <basic_centos_image>
ports:
- name: vnc-display
hostPort: 5901
containerPort: 5901
protocol: TCP
- name: x11-socket
hostPort: 6001
containerPort: 6001
protocol: TCP
そして次のサービス:
spec:
ports:
- name: vnc-display
protocol: TCP
port: 5901
targetPort: 5901
- name: x11-socket
protocol: TCP
port: 6001
targetPort: 6001
最初のPodにログインし、次を実行します。
Xvfb :1 -listen tcp &
x0vncserver -passwordfile /root/.vnc/passwd -display :1 -rfbport 5901 &
xhost +
私のローカルコンピュータからポート6001を転送し、VNCクライアントを起動してサーバーに接続できます。
2番目のPodでは、次のコマンドを実行します。
export DISPLAY=@IP_SERVICE:1
glxgears
VNCクライアントを介してローカルにディスプレイを表示できます。
ただし、クラスタ内でサービスのURLを使用する場合:
export DISPLAY=SERVICE_NAME.NAMESPACE:1
glxgears
その後、次のエラーが発生します。
Error: couldn't open display SERVICE_NAME.NAMESPACE:1
正確に言うと、「プライマリ」ポッドでは、このクラスタでDNS変換が正しく機能します(たとえば、デフォルトのHTTPリクエストの場合など)。 2つのPod間にDISPLAYをエクスポートする場合に、このエラーが発生します。
URLの代わりにサービスの@IPを使用すると、なぜ機能するのかを知っている人はいますか?
ありがとうございます!