Ingress: Improve port opening

Update nginx replica counts and rollout strategy.
What proxy-backend configmap changes and reload auto proxy nginx.
Make ingress optional.
Use <PREFIX>.<CLUSTER_NAME>.clusters.p.<DOMAIN> addresses for remote
cluster services.

Change-Id: Ideb146a8c0275822ee5cd28311c00a817f4202aa
diff --git a/core/installer/dodo_app_test.go b/core/installer/dodo_app_test.go
index 25ce4a3..1367c65 100644
--- a/core/installer/dodo_app_test.go
+++ b/core/installer/dodo_app_test.go
@@ -331,3 +331,72 @@
 	}
 	t.Log(string(r.Raw))
 }
+
+const exposeSVCRemoteCluster = `
+{
+    "cluster": "remote",
+    "service": [{
+		"name": "echo",
+		"type": "golang:1.20.0",
+		"source": {
+			"repository": "ssh://foo.bar"
+		},
+		"ports": [{
+			"name": "echo",
+			"value": 9090
+		}],
+		"expose": [{
+			"port": {
+				"name": "echo"
+			},
+			"network": "Private",
+			"subdomain": "echo"
+		}]
+	}]
+}
+`
+
+func TestExposeSVCRemoteCluster(t *testing.T) {
+	var buf bytes.Buffer
+	if _, err := buf.WriteString(exposeSVCRemoteCluster); err != nil {
+		t.Fatal(err)
+	}
+	clusters := []Cluster{{
+		Name:             "remote",
+		Kubeconfig:       "<KUBECONFIG>",
+		IngressClassName: "<INGRESS_CLASS_NAME>",
+	}}
+	if err := json.NewEncoder(&buf).Encode(struct {
+		Clusters []Cluster `json:"clusters"`
+	}{
+		clusters,
+	}); err != nil {
+		t.Fatal(err)
+	}
+	app, err := NewDodoApp(buf.Bytes())
+	if err != nil {
+		for _, e := range errors.Errors(err) {
+			t.Log(e)
+		}
+		t.Fatal(err)
+	}
+	release := Release{
+		Namespace:     "foo",
+		AppInstanceId: "foo-bar",
+		RepoAddr:      "ssh://192.168.100.210:22/config",
+		AppDir:        "/foo/bar",
+	}
+	keyGen := testKeyGen{}
+	r, err := app.Render(release, env, networks, clusters, map[string]any{
+		"managerAddr":                 "",
+		"appId":                       "",
+		"sshPrivateKey":               "",
+		"port_service_echo_0":         1,
+		"port_service_echo_0_cluster": 2,
+	}, nil, keyGen)
+	if err != nil {
+		t.Fatal(err)
+	}
+	t.Log(string(r.Raw))
+	t.Log(fmt.Sprintf("%+v", r.Ports))
+}