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/port-allocator/main.go b/core/port-allocator/main.go
index 7795993..3696342 100644
--- a/core/port-allocator/main.go
+++ b/core/port-allocator/main.go
@@ -302,21 +302,18 @@
 		if c.proxyCfg == nil {
 			return fmt.Errorf("does not support TCP/UDP proxy")
 		}
-		var namespace string
-		var err error
 		switch strings.ToLower(protocol) {
 		case "tcp":
-			if namespace, err = c.proxyCfg.AddProxy(port, dest, installer.ProtocolTCP); err != nil {
+			if _, err := c.proxyCfg.AddProxy(port, dest, installer.ProtocolTCP); err != nil {
 				return err
 			}
 		case "udp":
-			if namespace, err = c.proxyCfg.AddProxy(port, dest, installer.ProtocolUDP); err != nil {
+			if _, err := c.proxyCfg.AddProxy(port, dest, installer.ProtocolUDP); err != nil {
 				return err
 			}
 		default:
 			return fmt.Errorf("unknown protocol: %s", protocol)
 		}
-		dest = fmt.Sprintf("%s/proxy-backend-service:%d", namespace, port)
 	}
 	_, err := c.repo.Do(func(fs soft.RepoFS) (string, error) {
 		if err := c.writeState(fs); err != nil {
@@ -327,22 +324,27 @@
 			return "", err
 		}
 		portStr := strconv.Itoa(port)
+		var portMap map[string]any
+		base := "spec.values"
+		if r.IsRemoteProxy {
+			base = "spec.values.controller.service.extraPorts"
+			dest = portStr
+		}
 		switch protocol {
 		case "tcp":
-			tcp, err := extractPorts(rel, "spec.values.tcp")
+			portMap, err = extractPorts(rel, fmt.Sprintf("%s.tcp", base))
 			if err != nil {
 				return "", err
 			}
-			tcp[portStr] = dest
 		case "udp":
-			udp, err := extractPorts(rel, "spec.values.udp")
+			portMap, err = extractPorts(rel, fmt.Sprintf("%s.udp", base))
 			if err != nil {
 				return "", err
 			}
-			udp[portStr] = dest
 		default:
 			panic("MUST NOT REACH")
 		}
+		portMap[portStr] = dest
 		if err := c.writeRelease(fs, rel); err != nil {
 			return "", err
 		}