Merge branch 'master' of https://github.com/ikun-Lg/dubbo-kubernetes
diff --git a/ui-vue3/src/App.vue b/ui-vue3/src/App.vue
index 1387e7e..2853feb 100644
--- a/ui-vue3/src/App.vue
+++ b/ui-vue3/src/App.vue
@@ -68,6 +68,10 @@
 </template>
 
 <style lang="less">
+.ant-descriptions-item-content {
+  padding-left: 20px !important;
+}
+
 .__global_float_button_question {
   right: 24px;
 }
diff --git a/ui-vue3/src/api/mock/mockInstance.ts b/ui-vue3/src/api/mock/mockInstance.ts
new file mode 100644
index 0000000..7c723f3
--- /dev/null
+++ b/ui-vue3/src/api/mock/mockInstance.ts
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import Mock from 'mockjs'
+
+Mock.mock('/mock/instance/search', 'get', {
+  code: 200,
+  message: 'laborum qui',
+  data: {
+    total: 66,
+    curPage: 82,
+    pageSize: 31,
+    data: [
+      {
+        ip: '205.216.185.96',
+        name: '用省中际解理',
+        deployState: {
+          label: 'dolor',
+          value: 'in amet',
+          level: 'amet nisi incididunt',
+          tip: '133.16.55.40'
+        },
+        deployCluster: 'veniam elit irure',
+        registerStates: [
+          {
+            label: 'in consequat est',
+            value: 'esse non Lorem',
+            level: 'sit',
+            tip: '122.249.164.252'
+          }
+        ],
+        registerClusters: ['cupidatat'],
+        cpu: 'officia cupidatat reprehenderit magna ex',
+        memory: 'mollit',
+        startTime: '2016-07-31 19:20:31',
+        registerTime: '2014-02-09 04:02:41',
+        labels: ['cupidat']
+      },
+      {
+        ip: '117.23.142.162',
+        name: '之受力即此',
+        deployState: {
+          label: 'sint culpa elit quis id',
+          value: 'amet',
+          level: 'adipisicing do',
+          tip: '112.176.231.68'
+        },
+        deployCluster: 'esse sit',
+        registerStates: [
+          {
+            label: 'ut',
+            value: 'eu sit',
+            level: 'in eiusmod ullamco',
+            tip: '220.153.108.236'
+          }
+        ],
+        registerClusters: ['ea consectetur'],
+        cpu: 'dolor sint deserunt',
+        memory: 'sint eu commodo proident',
+        startTime: '1994-12-22 18:24:57',
+        registerTime: '1986-07-24 03:18:24'
+      },
+      {
+        ip: '41.215.196.61',
+        name: '值青给值',
+        deployState: {
+          label: 'sunt',
+          value: 'consectetur in',
+          level: 'culpa dolore',
+          tip: '142.182.249.124'
+        },
+        deployCluster: 'cupidatat eu nostrud',
+        registerStates: [
+          {
+            label: 'ad quis',
+            value: 'Excepteur esse dolore Ut dolore',
+            level: 'ipsum ad quis',
+            tip: '220.55.203.4'
+          }
+        ],
+        registerClusters: ['Excepteur sit laboris'],
+        cpu: 'fugiat pariatur laborum ut',
+        memory: 'Lorem adipisicing sunt',
+        startTime: '1984-04-25 12:22:51',
+        registerTime: '1976-06-06 19:58:58'
+      }
+    ]
+  }
+})
diff --git a/ui-vue3/src/api/service/instance.ts b/ui-vue3/src/api/service/instance.ts
new file mode 100644
index 0000000..c07ef80
--- /dev/null
+++ b/ui-vue3/src/api/service/instance.ts
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import request from '@/base/http/request'
+
+export const searchInstances = (params: any): Promise<any> => {
+  return request({
+    url: '/instance/search',
+    method: 'get',
+    params
+  })
+}
diff --git a/ui-vue3/src/base/i18n/en.ts b/ui-vue3/src/base/i18n/en.ts
index bd8dfd2..e3ef791 100644
--- a/ui-vue3/src/base/i18n/en.ts
+++ b/ui-vue3/src/base/i18n/en.ts
@@ -18,6 +18,50 @@
 import type { I18nType } from './type.ts'
 
 const words: I18nType = {
+  instanceDomain: {
+    details: 'Detail',
+    monitor: 'Monitor',
+    linkTracking: 'Link Tracking',
+    configuration: 'Configuration',
+    event: 'Event'
+  },
+  appServiceTimeout: 'Adjusting the timeout for application service provision',
+  enableAppInstanceLogs: 'Enable access logs for all instances of this application',
+  appServiceLoadBalance: 'Adjusting the load balancing strategy for application service provision',
+  appServiceRetries: 'Adjusting the number of retries for application provided services',
+  appServiceNegativeClusteringMethod:
+    'Adjusting the negative clustering method for application service provision',
+  executionLog: 'Execution Log',
+  clusterApproach: 'Cluster Approach',
+  retryCount: 'Retry Count',
+  event: 'Event',
+  configuration: 'Configuration',
+  linkTracking: 'Link Tracking',
+  monitor: 'Monitor',
+  details: 'Details',
+  creationTime_k8s: 'creationTime(k8s)',
+  dubboPort: 'Dubbo Port',
+  whichApplication: 'application',
+  registerTime: 'Register Time',
+  startTime_k8s: 'Start Time(k8s)',
+  registerStates: 'Register States',
+  deployState: 'Deployment Status',
+  owningWorkload_k8s: 'Owning Workload(k8s)',
+  creationTime: 'Creation Time',
+  nodeIP: 'Node IP',
+  healthExamination: 'Health Examination',
+  instanceImage_k8s: 'Image(k8s)',
+  instanceLabel: 'Instance Label',
+  instanceDetail: 'Instance Detail',
+  state: 'State',
+  memory: 'Memory',
+  CPU: 'CPU',
+  node: 'Node',
+  labels: 'Labels',
+  instanceIP: 'Instance IP',
+  instanceName: 'Instance Name',
+  instance: 'Instance',
+  resourceDetails: 'Resource Details',
   service: 'Service',
   serviceSearch: 'Search Service',
   serviceGovernance: 'Routing Rule',
@@ -44,7 +88,6 @@
   app: 'Application',
   services: 'Services',
   application: 'Application',
-  instance: 'Instance',
   all: 'All',
   ip: 'IP',
   qps: 'qps',
@@ -56,7 +99,7 @@
   appName: 'Application Name',
   instanceNum: 'Instance Number',
   deployCluster: 'Deploy Cluster',
-  registerClusters: 'Register Clusters',
+  registerCluster: 'Register Cluster',
   serviceName: 'Service Name',
   registrySource: 'Registry Source',
   instanceRegistry: 'Instance Registry',
@@ -283,15 +326,11 @@
     typeDefault: 'please type '
   },
   none: 'No Select',
-  details: 'Details',
   debug: 'Debug',
   distribution: 'Distribution',
-  monitor: 'Monitor',
   tracing: 'Tracing',
-  event: 'Event',
 
   provideService: 'Provide Service',
-  idx: 'Index',
   dependentService: 'Dependent Service'
 }
 
diff --git a/ui-vue3/src/layout/header/layout_header.vue b/ui-vue3/src/layout/header/layout_header.vue
index dc169e3..9c18b5c 100644
--- a/ui-vue3/src/layout/header/layout_header.vue
+++ b/ui-vue3/src/layout/header/layout_header.vue
@@ -173,15 +173,19 @@
   .header {
     background: v-bind('PRIMARY_COLOR');
     padding: 0;
+
     .search-group {
       display: flex;
       align-items: center;
+
       .select-type {
         width: 120px;
       }
+
       .input-keywords {
         width: calc(100% - 152px);
       }
+
       .search-icon {
         width: 32px;
       }
diff --git a/ui-vue3/src/router/defaultRoutes.ts b/ui-vue3/src/router/defaultRoutes.ts
index a63af5d..d0af19f 100644
--- a/ui-vue3/src/router/defaultRoutes.ts
+++ b/ui-vue3/src/router/defaultRoutes.ts
@@ -99,8 +99,61 @@
           {
             path: '/instances',
             name: 'instances',
-            component: () => import('../views/resources/instances/index.vue'),
-            meta: {}
+            component: LayoutTab,
+            redirect: 'all',
+            meta: {
+              tab_parent: true
+            },
+            children: [
+              {
+                path: '/all',
+                name: 'all',
+                component: () => import('../views/resources/instances/index.vue'),
+                meta: {
+                  hidden: true
+                }
+              },
+              {
+                path: '/detail/:instance',
+                name: 'instanceDomain.details',
+                component: () => import('../views/resources/instances/tabs/details.vue'),
+                meta: {
+                  tab: true
+                }
+              },
+              {
+                path: '/monitor/:instance',
+                name: 'instanceDomain.monitor',
+                component: () => import('../views/resources/instances/tabs/monitor.vue'),
+                meta: {
+                  tab: true
+                }
+              },
+              {
+                path: '/linktracking/:instance',
+                name: 'instanceDomain.linkTracking',
+                component: () => import('../views/resources/instances/tabs/linkTracking.vue'),
+                meta: {
+                  tab: true
+                }
+              },
+              {
+                path: '/configuration/:instance',
+                name: 'instanceDomain.configuration',
+                component: () => import('../views/resources/instances/tabs/configuration.vue'),
+                meta: {
+                  tab: true
+                }
+              },
+              {
+                path: '/event/:instance',
+                name: 'instanceDomain.event',
+                component: () => import('../views/resources/instances/tabs/event.vue'),
+                meta: {
+                  tab: true
+                }
+              }
+            ]
           },
           {
             path: '/services',
diff --git a/ui-vue3/src/views/resources/instances/index.vue b/ui-vue3/src/views/resources/instances/index.vue
index 6a4db5c..de41bb1 100644
--- a/ui-vue3/src/views/resources/instances/index.vue
+++ b/ui-vue3/src/views/resources/instances/index.vue
@@ -15,8 +15,159 @@
   ~ limitations under the License.
 -->
 <template>
-  <div class="__container_resources_instance_index">实例</div>
+  <div class="__container_resources_application_index">
+    <search-table :search-domain="searchDomain">
+      <template #bodyCell="{ text, record, index, column }">
+        <template v-if="column.dataIndex === 'deployState'">
+          <a-typography-text type="success">{{ text.label }}</a-typography-text>
+        </template>
+
+        <template v-else-if="column.dataIndex === 'deployCluster'">
+          <a-tag color="success">
+            {{ text }}
+          </a-tag>
+        </template>
+
+        <template v-if="column.dataIndex === 'registerStates'">
+          <a-typography-text type="success" v-for="t in text">{{ t.label }}</a-typography-text>
+        </template>
+
+        <template v-if="column.dataIndex === 'registerClusters'">
+          <a-tag v-for="t in text" color="warning">
+            {{ t }}
+          </a-tag>
+        </template>
+
+        <template v-if="column.dataIndex === 'labels'">
+          <a-tag v-for="t in text" color="warning">
+            {{ t }}
+          </a-tag>
+        </template>
+        <template v-else-if="column.dataIndex === 'name'">
+          <router-link :to="`detail/${record[column.key]}`">{{ text }}</router-link>
+        </template>
+        <template v-else-if="column.dataIndex === 'ip'">
+          <router-link :to="`detail/${record[column.key]}`">{{ text }}</router-link>
+        </template>
+      </template>
+    </search-table>
+  </div>
 </template>
 
-<script setup lang="ts"></script>
-<style lang="less" scoped></style>
+<script setup lang="ts">
+import { onMounted, provide, reactive } from 'vue'
+import { searchInstances } from '@/api/service/instance'
+import SearchTable from '@/components/SearchTable.vue'
+import { SearchDomain, sortString } from '@/utils/SearchUtil'
+import { PROVIDE_INJECT_KEY } from '@/base/enums/ProvideInject'
+
+let columns = [
+  {
+    title: 'instanceIP',
+    key: 'ip',
+    dataIndex: 'ip',
+    sorter: (a: any, b: any) => sortString(a.instanceIP, b.instanceIP),
+    width: 140
+  },
+  {
+    title: 'instanceName',
+    key: 'name',
+    dataIndex: 'name',
+    sorter: (a: any, b: any) => sortString(a.instanceName, b.instanceName),
+    width: 140
+  },
+  {
+    title: 'deployState',
+    key: 'deployState',
+    dataIndex: 'deployState',
+    width: 120,
+    sorter: (a: any, b: any) => sortString(a.instanceNum, b.instanceNum)
+  },
+
+  {
+    title: 'deployCluster',
+    key: 'deployCluster',
+    dataIndex: 'deployCluster',
+    sorter: (a: any, b: any) => sortString(a.deployCluster, b.deployCluster),
+    width: 120
+  },
+  {
+    title: 'registerStates',
+    key: 'registerStates',
+    dataIndex: 'registerStates',
+    sorter: (a: any, b: any) => sortString(a.registerStates, b.registerStates),
+    width: 120
+  },
+  {
+    title: 'registerCluster',
+    key: 'registerClusters',
+    dataIndex: 'registerClusters',
+    sorter: (a: any, b: any) => sortString(a.registerCluster, b.registerCluster),
+    width: 140
+  },
+  {
+    title: 'CPU',
+    key: 'cpu',
+    dataIndex: 'cpu',
+    sorter: (a: any, b: any) => sortString(a.CPU, b.CPU),
+    width: 140
+  },
+  {
+    title: 'memory',
+    key: 'memory',
+    dataIndex: 'memory',
+    sorter: (a: any, b: any) => sortString(a.memory, b.memory),
+    width: 80
+  },
+  {
+    title: 'startTime_k8s',
+    key: 'startTime_k8s',
+    dataIndex: 'startTime',
+    sorter: (a: any, b: any) => sortString(a.startTime_k8s, b.startTime_k8s),
+    width: 200
+  },
+  {
+    title: 'registerTime',
+    key: 'registerTime',
+    dataIndex: 'registerTime',
+    sorter: (a: any, b: any) => sortString(a.registerTime, b.registerTime),
+    width: 200
+  },
+  {
+    title: 'labels',
+    key: 'labels',
+    dataIndex: 'labels',
+    width: 140
+  }
+]
+
+// search
+const searchDomain = reactive(
+  new SearchDomain(
+    [
+      {
+        label: 'appName',
+        param: 'appName',
+        placeholder: 'typeAppName',
+        style: {
+          width: '200px'
+        }
+      }
+    ],
+    searchInstances,
+    columns
+  )
+)
+
+onMounted(() => {
+  searchDomain.onSearch()
+  console.log(searchDomain.result)
+})
+
+provide(PROVIDE_INJECT_KEY.SEARCH_DOMAIN, searchDomain)
+</script>
+<style lang="less" scoped>
+.search-table-container {
+  min-height: 60vh;
+}
+</style>
diff --git a/ui-vue3/src/views/resources/instances/tabs/configuration.vue b/ui-vue3/src/views/resources/instances/tabs/configuration.vue
new file mode 100644
index 0000000..7be4f3d
--- /dev/null
+++ b/ui-vue3/src/views/resources/instances/tabs/configuration.vue
@@ -0,0 +1,115 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+-->
+
+<template>
+  <a-descriptions title="" layout="vertical" :column="2">
+    <!-- execution log -->
+    <a-descriptions-item>
+      <template v-slot:label>
+        {{ $t('executionLog') }}
+        <a-tooltip placement="topLeft">
+          <template #title> {{ $t('enableAppInstanceLogs') }}(provider.accesslog) </template>
+          <Icon icon="bitcoin-icons:info-circle-outline" class="iconStyle" />
+        </a-tooltip>
+      </template>
+
+      <span :class="{ active: !state }" :style="{ color: 'black' }">
+        {{ $t('close') }}
+      </span>
+      <a-switch v-model:checked="state" :loading="loading" />
+      <span :class="{ active: state }" :style="{ color: state ? PRIMARY_COLOR : 'black' }">
+        {{ $t('enabled') }}
+      </span>
+    </a-descriptions-item>
+
+    <!-- retry count -->
+    <a-descriptions-item>
+      <template v-slot:label>
+        {{ $t('retryCount') }}
+        <a-tooltip placement="topLeft">
+          <template #title>{{ $t('appServiceRetries') }}</template>
+          <Icon icon="bitcoin-icons:info-circle-outline" class="iconStyle" />
+        </a-tooltip>
+      </template>
+      <a-typography-paragraph editable v-model:content="retryCount"> </a-typography-paragraph>
+    </a-descriptions-item>
+
+    <!-- Load Balance -->
+    <a-descriptions-item>
+      <template v-slot:label>
+        {{ $t('loadBalance') }}
+        <a-tooltip placement="topLeft">
+          <template #title>{{ $t('appServiceLoadBalance') }}(provider.loadbalance)</template>
+          <Icon icon="bitcoin-icons:info-circle-outline" class="iconStyle" />
+        </a-tooltip>
+      </template>
+
+      <a-typography-paragraph editable v-model:content="loadBalance"> </a-typography-paragraph>
+    </a-descriptions-item>
+
+    <!-- timeout -->
+    <a-descriptions-item>
+      <template v-slot:label>
+        {{ $t('timeout') }}
+        <a-tooltip placement="topLeft">
+          <template #title> {{ $t('appServiceTimeout') }}(provider.timeout) </template>
+          <Icon icon="bitcoin-icons:info-circle-outline" class="iconStyle" />
+        </a-tooltip>
+      </template>
+
+      <a-typography-paragraph editable v-model:content="timeout"> </a-typography-paragraph>
+    </a-descriptions-item>
+
+    <!-- Cluster approach -->
+    <a-descriptions-item>
+      <template v-slot:label>
+        {{ $t('clusterApproach') }}
+        <a-tooltip placement="topLeft">
+          <template #title>{{ $t('appServiceNegativeClusteringMethod') }}</template>
+          <Icon icon="bitcoin-icons:info-circle-outline" class="iconStyle" />
+        </a-tooltip>
+      </template>
+
+      <a-typography-paragraph editable v-model:content="clusterApproach"> </a-typography-paragraph>
+    </a-descriptions-item>
+  </a-descriptions>
+</template>
+
+<script lang="ts" setup>
+import { ref, onMounted } from 'vue'
+import { Icon } from '@iconify/vue'
+import { PRIMARY_COLOR } from '@/base/constants'
+
+// 执行日志开关
+const state = ref('')
+const loading = ref(false)
+const loadBalance = ref('random')
+const clusterApproach = ref('failover')
+const retryCount = ref('2次')
+const timeout = ref('1000 ms')
+</script>
+
+<style lang="less" scoped>
+.active {
+  font-size: 13px;
+  font-weight: bold;
+}
+
+.iconStyle {
+  font-size: 17px;
+}
+</style>
diff --git a/ui-vue3/src/views/resources/instances/tabs/details.vue b/ui-vue3/src/views/resources/instances/tabs/details.vue
new file mode 100644
index 0000000..a135518
--- /dev/null
+++ b/ui-vue3/src/views/resources/instances/tabs/details.vue
@@ -0,0 +1,144 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+-->
+
+<template>
+  <a-descriptions title="" layout="vertical" :column="2">
+    <!-- instanceName -->
+    <a-descriptions-item :label="$t('instanceName')">
+      <a-typography-paragraph copyable>
+        {{ instanceName }}
+      </a-typography-paragraph>
+    </a-descriptions-item>
+
+    <!-- Creation time -->
+    <a-descriptions-item :label="$t('creationTime_k8s')">
+      <a-typography-paragraph> 20230/12/19 22:09:34 </a-typography-paragraph>
+    </a-descriptions-item>
+
+    <!-- deployState -->
+    <a-descriptions-item :label="$t('deployState')">
+      <a-typography-paragraph type="success"> Running </a-typography-paragraph>
+      <a-typography-paragraph type="danger"> Stop </a-typography-paragraph>
+    </a-descriptions-item>
+
+    <!-- Start time -->
+    <a-descriptions-item :label="$t('startTime_k8s')">
+      <a-typography-paragraph> 20230/12/19 22:09:34 </a-typography-paragraph>
+    </a-descriptions-item>
+
+    <!-- registerStates -->
+    <a-descriptions-item :label="$t('registerStates')">
+      <a-typography-paragraph type="success"> Registed </a-typography-paragraph>
+      <a-typography-paragraph type="danger"> UnRegisted </a-typography-paragraph>
+    </a-descriptions-item>
+
+    <!-- Register Time -->
+    <a-descriptions-item :label="$t('registerTime')">
+      <a-typography-paragraph> 20230/12/19 22:09:34 </a-typography-paragraph>
+    </a-descriptions-item>
+
+    <!-- instanceIP -->
+    <a-descriptions-item :label="$t('instanceIP')">
+      <a-typography-paragraph copyable> 192.168.0.1 </a-typography-paragraph>
+    </a-descriptions-item>
+
+    <!-- deploy cluster -->
+    <a-descriptions-item :label="$t('deployCluster')">
+      <a-typography-paragraph> sz-ali-zk-f8otyo4r </a-typography-paragraph>
+    </a-descriptions-item>
+
+    <!-- Dubbo Port -->
+    <a-descriptions-item :label="$t('dubboPort')">
+      <a-typography-paragraph copyable> 2088 </a-typography-paragraph>
+    </a-descriptions-item>
+
+    <!-- Register cluster -->
+    <a-descriptions-item :label="$t('registerCluster')">
+      <a-typography-paragraph> sz-ali-zk-f8otyo4r </a-typography-paragraph>
+    </a-descriptions-item>
+
+    <!-- whichApplication -->
+    <a-descriptions-item :label="$t('whichApplication')">
+      <a-typography-link @click="checkApplication()"> shop-b </a-typography-link>
+    </a-descriptions-item>
+
+    <!-- Node IP -->
+    <a-descriptions-item :label="$t('nodeIP')">
+      <a-typography-paragraph copyable> 30.33.0.1 </a-typography-paragraph>
+    </a-descriptions-item>
+
+    <!-- Owning workload(k8s) -->
+    <a-descriptions-item :label="$t('owningWorkload_k8s')">
+      <a-typography-paragraph> shop-user-base </a-typography-paragraph>
+    </a-descriptions-item>
+
+    <!-- image -->
+    <a-descriptions-item :label="$t('instanceImage_k8s')">
+      <a-typography-paragraph copyable>
+        apache/org.apahce.dubbo.samples.shop-user:v1
+      </a-typography-paragraph>
+    </a-descriptions-item>
+
+    <!-- instanceLabel -->
+    <a-descriptions-item :label="$t('instanceLabel')">
+      <div class="tagsBox flexLayoutBox">
+        <a-tag>app=shop-user</a-tag>
+        <a-tag>version=v1</a-tag>
+        <a-tag>region=shenzhen</a-tag>
+      </div>
+    </a-descriptions-item>
+
+    <!-- health examination -->
+    <a-descriptions-item :label="$t('healthExamination')">
+      <div class="healthBox flexLayoutBox">
+        <p class="white_space">启动探针(StartupProbe):关闭</p>
+        <p class="white_space">就绪探针(ReadinessProbe):开启 类型: Http 端口:22222</p>
+        <p class="white_space">存活探针(LivenessProbe):开启 类型: Http 端口:22222</p>
+      </div>
+    </a-descriptions-item>
+  </a-descriptions>
+</template>
+
+<script lang="ts" setup>
+import { ref } from 'vue'
+
+// instance name
+const instanceName = ref('shop-user-base-7e33f1e')
+
+// Click on the application name to view the application
+const checkApplication = () => {}
+</script>
+
+<style lang="less" scoped>
+.flexLayoutBox {
+  border: 1px solid black;
+  border-radius: 10px;
+  padding: 10px;
+  display: flex;
+}
+
+.tagsBox {
+  align-items: center;
+  justify-content: space-around;
+}
+
+.healthBox {
+  align-items: flex-start;
+  flex-direction: column;
+  justify-content: center;
+}
+</style>
diff --git a/ui-vue3/src/views/resources/instances/tabs/event.vue b/ui-vue3/src/views/resources/instances/tabs/event.vue
new file mode 100644
index 0000000..5f6896e
--- /dev/null
+++ b/ui-vue3/src/views/resources/instances/tabs/event.vue
@@ -0,0 +1,26 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+-->
+
+<template>
+  <div>event</div>
+</template>
+
+<script lang="ts" setup>
+import { ref } from 'vue'
+</script>
+
+<style lang="less" scoped></style>
diff --git a/ui-vue3/src/views/resources/instances/tabs/linkTracking.vue b/ui-vue3/src/views/resources/instances/tabs/linkTracking.vue
new file mode 100644
index 0000000..760410b
--- /dev/null
+++ b/ui-vue3/src/views/resources/instances/tabs/linkTracking.vue
@@ -0,0 +1,26 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+-->
+
+<template>
+  <div>linkTracking</div>
+</template>
+
+<script lang="ts" setup>
+import { ref } from 'vue'
+</script>
+
+<style lang="less" scoped></style>
diff --git a/ui-vue3/src/views/resources/instances/tabs/monitor.vue b/ui-vue3/src/views/resources/instances/tabs/monitor.vue
new file mode 100644
index 0000000..c1342df
--- /dev/null
+++ b/ui-vue3/src/views/resources/instances/tabs/monitor.vue
@@ -0,0 +1,26 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+-->
+
+<template>
+  <div>monitor</div>
+</template>
+
+<script lang="ts" setup>
+import { ref } from 'vue'
+</script>
+
+<style lang="less" scoped></style>