This section provides an example of integrating Weave Scope into extensions to help you familiarize how to quickly integrate third-party tools and systems with web UIs into extensions by iframe.
Weave Scope automatically generates a map of your application, enabling you to intuitively understand, monitor, and control your containerized, microservices-based application.
To deploy Weave Scope, view the related content in Deploy Weave Scope, or run the following command to deploy it to a Kubernetes cluster:
kubectl apply -f https://raw.githubusercontent.com/kubesphere/extension-samples/master/extensions-backend/weave-scope/manifests.yaml
kubectl apply -f https://raw.githubusercontent.com/kubesphere/extension-samples/master/extensions-backend/weave-scope/weave-scope-reverse-proxy.yaml
Clone the code of this example from GitHub, and then refer to Create a Hello World Extension for project creation, local development and debugging.
cd ~/kubesphere-extensions
git clone https://github.com/kubesphere/extension-samples.git
cp -r ~/kubesphere-extensions/extension-samples/extensions-frontend/extensions/weave-scope ~/kubesphere-extensions/ks-console/extensions
The following code block shows how to integrate Weave Scope:
File path: ~/kubesphere-extensions/ks-console/extensions/weave-scope/src/App.jsx
import React, { useState, useRef } from 'react';
import { Loading } from '@kubed/components';
import { useLocalStorage } from '@kubed/hooks';
export default function App() {
const [loading, setLoading] = useState(true);
const FRAME_URL =
'/proxy/weave.works/#!/state/{"topologyId":"pods"}';
const iframeRef = useRef();
const onIframeLoad = () => {
const iframeDom = iframeRef.current?.contentWindow?.document;
if (iframeDom) {
if (iframeDom.querySelector('#app > div > div.header > div')) {
iframeDom.querySelector('#app > div > div.header > div').style.display = 'none';
}
}
setLoading(false);
};
return (
<>
{loading && <Loading className="page-loading" />}
<iframe
ref={iframeRef}
src={FRAME_URL}
width="100%"
height="100%"
frameBorder="0"
style={{
height: 'calc(100vh - 68px)',
display: loading ? 'none' : 'block',
}}
onLoad={onIframeLoad}
/>
</>
);
}
The preceding code block completes the following tasks:
iframe
to integrate Weave Scope into extensions. FRAME_URL
is the reverse proxy of Weave Scope, which shares the origin with the KubeSphere web console.Due to the Same-Origin Policy, if the third-party system webpage has a different origin from the KubeSphere frontend, KubeSphere cannot use JavaScript to read and operate on the third-party system iframe. Therefore, it requires the backend to process the frontend address of the third-party system as the same source as the KubeSphere frontend (same protocol, host, and port).
iframe
) by using React
ref
. This way, you can adjust the style and hide the effect caused by the selector.Run yarn dev
to launch a local environment, and then access the webpage through the extension: