# working-with-istio-on-non-flat-network This document uses an example to demonstrate how to use [Istio](https://istio.io/) on Karmada when the clusters reside on the different networks. Follow this guide to install the Istio control plane on `member1` (the primary cluster) and configure `member2` (the remote cluster) to use the control plane in `member1`. All clusters reside on the different network, meaning there is not direct connectivity between the pods in all clusters. *** The reason for deploying `istiod` on the `member1` is that `kiali` needs to be deployed on the same cluster as `istiod` . If `istiod` and `kiali` are deployed on the `karmada-host`,`kiali` will not find the namespace created by `karmada`. It cannot implement the function of service topology for application deployed by `karmada`. I will continue to provide a new solution later that deploys `istiod` on the `karmada-host`. *** ## Install Karmada ### Install karmada control plane Following the steps [Install karmada control plane](https://github.com/karmada-io/karmada#install-karmada-control-plane) in Quick Start, you can get a Karmada. ## Deploy Istio ### Install istioctl Please refer to the [istioctl](https://istio.io/latest/docs/setup/getting-started/#download) Installation. ### Prepare CA certificates Following the steps [plug-in-certificates-and-key-into-the-cluster](https://istio.io/latest/docs/tasks/security/cert-management/plugin-ca-cert/#plug-in-certificates-and-key-into-the-cluster) to configure Istio CA. Replace the cluster name `cluster1` with `primary`, the output will looks like as following: ```bash [root@vm1-su-001 istio-1.12.6]# tree certs/ certs/ ├── primary │   ├── ca-cert.pem │   ├── ca-key.pem │   ├── cert-chain.pem │   └── root-cert.pem ├── root-ca.conf ├── root-cert.csr ├── root-cert.pem ├── root-cert.srl └── root-key.pem ``` ### Install Istio on karmada-apiserver Export `KUBECONFIG` and switch to `karmada apiserver`: ```bash export KUBECONFIG=$HOME/.kube/karmada.config kubectl config use-context karmada-apiserver ``` Create a secret `cacerts` in `istio-system` namespace: ```bash kubectl create namespace istio-system kubectl create secret generic cacerts -n istio-system \ --from-file=certs/primary/ca-cert.pem \ --from-file=certs/primary/ca-key.pem \ --from-file=certs/primary/root-cert.pem \ --from-file=certs/primary/cert-chain.pem ``` Create a propagation policy for `cacerts` secret: ```bash cat < istio-remote-secret-member2.yaml ``` Switch to `member1`: ```bash kubectl config use-context member1 ``` Apply istio remote secret ```bash kubectl apply -f istio-remote-secret-member2.yaml ``` 2. Configure member2 as a remote Save the address of `member1`’s east-west gateway ```bash export DISCOVERY_ADDRESS=$(kubectl -n istio-system get svc istio-eastwestgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') ``` Create a remote configuration on `member2`. Switch to `member2`: ```bash kubectl config use-context member2 ``` ```bash cat <