配置crd-policy

[root@brazil-11627 ~]# more service-export-import-crd-policy.yaml
# propagate ServiceExport CRD
apiVersion: policy.karmada.io/v1alpha1
kind: ClusterPropagationPolicy
metadata:
  name: serviceexport-policy
spec:
  resourceSelectors:
    - apiVersion: apiextensions.k8s.io/v1
      kind: CustomResourceDefinition
      name: serviceexports.multicluster.x-k8s.io
  placement:
    clusterAffinity:
      clusterNames:
        - brazil
        - chile01
---
# propagate ServiceImport CRD
apiVersion: policy.karmada.io/v1alpha1
kind: ClusterPropagationPolicy
metadata:
  name: serviceimport-policy
spec:
  resourceSelectors:
    - apiVersion: apiextensions.k8s.io/v1
      kind: CustomResourceDefinition
      name: serviceimports.multicluster.x-k8s.io
  placement:
    clusterAffinity:
      clusterNames:
        - brazil
        - chile01

配置导出policy

[root@brazil-11627 ~]# cat service-export-demo-policy.yaml
apiVersion: multicluster.x-k8s.io/v1alpha1
kind: ServiceExport
metadata:
  name: demo
---
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
  name: serve-export-policy
spec:
  resourceSelectors:
    - apiVersion: multicluster.x-k8s.io/v1alpha1
      kind: ServiceExport
      name: demo
  placement:
    clusterAffinity:
      clusterNames:
        - chile01

配置导入

[root@brazil-11627 ~]# cat service-improt-demo-policy.yaml
apiVersion: multicluster.x-k8s.io/v1alpha1
kind: ServiceImport
metadata:
  name: demo
spec:
  type: ClusterSetIP
  ports:
  - name: port-0   # 该name信息很重要,如果不配置会无法在iptables nat表中进行转发
    port: 80
    protocol: TCP
---
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
  name: serve-import-policy
spec:
  resourceSelectors:
    - apiVersion: multicluster.x-k8s.io/v1alpha1
      kind: ServiceImport
      name: demo
  placement:
    clusterAffinity:
      clusterNames:
        - brazil

https://karmada.io/docs/userguide/service/multi-cluster-service

iptables转发信息

[root@brazil-11627 ~]# iptables-save | grep derived-demo
-A KUBE-SEP-K62PFHEP6QVAGI5W -s 172.16.0.4/32 -m comment --comment "default/derived-demo:port-0" -j KUBE-MARK-MASQ
-A KUBE-SEP-K62PFHEP6QVAGI5W -p tcp -m comment --comment "default/derived-demo:port-0" -m tcp -j DNAT --to-destination 172.16.0.4:80
-A KUBE-SERVICES -d 10.247.31.76/32 -p tcp -m comment --comment "default/derived-demo:port-0 cluster IP" -m tcp --dport 80 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.247.31.76/32 -p tcp -m comment --comment "default/derived-demo:port-0 cluster IP" -m tcp --dport 80 -j KUBE-SVC-WIEL5QUBLOM63VPZ
-A KUBE-SVC-WIEL5QUBLOM63VPZ -m comment --comment "default/derived-demo:port-0" -j KUBE-SEP-K62PFHEP6QVAGI5W

相关指令

kubectl get clusters
kubectl delete cm member2 member3 member4  -n karmada-cluster
kubectl get endpointslices
kubectl get ep  derived-demo
kubectl get serviceimport
kubectl get serviceimport
kubectl get crds

测试和监控脚本

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

  location / {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://tomcat-sample.default.svc.cluster.local:8080/;
  }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}



while true
do
       HTTPCODE=`curl -I -m 10 -o /dev/null -s -w %{http_code}  http://tomcat-sample.default.svc.cluster.local:8080/sample/`
       if [[ $HTTPCODE !=200 ]];then
            echo "site error"
       else
            echo "site ok"
       fi
done

donation