Repository: vmware-tanzu/velero (Go)

Issue:
Cannot restore "service" with velero build from the main branch
Run restore with velero built from the main branch, get the following errors:
```
error restoring services/kibishii-workload/etcd-client: Service "etcd-client" is invalid: spec.clusterIPs: Invalid value: []string{"100.70.53.8"}: must be empty when clusterIP is empty
error restoring services/kibishii-workload/etcd0: Service "etcd0" is invalid: spec.clusterIPs: Invalid value: []string{"100.66.73.184"}: must be empty when clusterIP is empty
error restoring services/kibishii-workload/etcd1: Service "etcd1" is invalid: spec.clusterIPs: Invalid value: []string{"100.69.23.44"}: must be empty when clusterIP is empty
error restoring services/kibishii-workload/etcd2: Service "etcd2" is invalid: spec.clusterIPs: Invalid value: []string{"100.64.23.70"}: must be empty when clusterIP is empty
```

This is caused by that we bumped up the version of library `k8s.io/api/core/v1` from `v0.19.12` to `v0.20.9` in PR #4022.
There is a new property `ClusterIPs` introduced in `v0.20.9` https://github.com/kubernetes/api/blob/v0.20.9/core/v1/types.go#L4098 and the restore action empties the `ClusterIP` but not for `ClusterIPs` https://github.com/vmware-tanzu/velero/blob/main/pkg/restore/service_action.go#L56


**Vote on this issue!**

This is an invitation to the Velero community to vote on issues, you can see the project's [top voted issues listed here](https://github.com/vmware-tanzu/velero/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc).  
Use the "reaction smiley face" up to the right of this comment to vote.

- :+1: for "I would like to see this bug fixed as soon as possible"
- :-1: for "There are more important bugs to focus on right now"



Discussion:
I also noticed this issue too. The services cannot be restored due to:

```
error restoring services/<MY_NAMESPACE>/<MY_SERVICE>: Service "<MY_SERVICE>" is invalid: spec.clusterIPs: Invalid value: []string{"<MY_CNI_IP>"}: must be empty when clusterIP is empty
```

this error.



Patch:
diff --git a/changelogs/unreleased/4101-ywk253100 b/changelogs/unreleased/4101-ywk253100
new file mode 100644
index 0000000000..747db01ca4
--- /dev/null
+++ b/changelogs/unreleased/4101-ywk253100
@@ -0,0 +1,1 @@
+Empty the "ClusterIPs" along with "ClusterIP" when "ClusterIP" isn't "None"
\ No newline at end of file
diff --git a/pkg/restore/service_action.go b/pkg/restore/service_action.go
index e8b58f0621..b18701b4da 100644
--- a/pkg/restore/service_action.go
+++ b/pkg/restore/service_action.go
@@ -55,6 +55,7 @@ func (a *ServiceAction) Execute(input *velero.RestoreItemActionExecuteInput) (*v
 
 	if service.Spec.ClusterIP != "None" {
 		service.Spec.ClusterIP = ""
+		service.Spec.ClusterIPs = nil
 	}
 
 	/* Do not delete NodePorts if restore triggered with "--preserve-nodeports" flag */


Test patch:
diff --git a/pkg/restore/service_action_test.go b/pkg/restore/service_action_test.go
index e6b0b15300..4ff53e2d19 100644
--- a/pkg/restore/service_action_test.go
+++ b/pkg/restore/service_action_test.go
@@ -73,13 +73,14 @@ func TestServiceActionExecute(t *testing.T) {
 		expectedRes corev1api.Service
 	}{
 		{
-			name: "clusterIP (only) should be deleted from spec",
+			name: "clusterIP/clusterIPs should be deleted from spec",
 			obj: corev1api.Service{
 				ObjectMeta: metav1.ObjectMeta{
 					Name: "svc-1",
 				},
 				Spec: corev1api.ServiceSpec{
 					ClusterIP:      "should-be-removed",
+					ClusterIPs:     []string{"should-be-removed"},
 					LoadBalancerIP: "should-be-kept",
 				},
 			},