diff --git a/cluster/gce/config-default.sh b/cluster/gce/config-default.sh index 29cc0523846..01912818576 100755 --- a/cluster/gce/config-default.sh +++ b/cluster/gce/config-default.sh @@ -496,3 +496,4 @@ GCE_PRIVATE_CLUSTER_PORTS_PER_VM="${KUBE_GCE_PRIVATE_CLUSTER_PORTS_PER_VM:-}" # Optional: Create apiserver konnectivity server and agent. ENABLE_EGRESS_VIA_KONNECTIVITY_SERVICE="${KUBE_ENABLE_EGRESS_VIA_KONNECTIVITY_SERVICE:-false}" +KONNECTIVITY_SERVICE_PROXY_PROTOCOL_MODE="${KUBE_KONNECTIVITY_SERVICE_PROXY_PROTOCOL_MODE:-grpc}" diff --git a/cluster/gce/gci/configure-helper.sh b/cluster/gce/gci/configure-helper.sh index 86f5111e929..2ac0d176071 100644 --- a/cluster/gce/gci/configure-helper.sh +++ b/cluster/gce/gci/configure-helper.sh @@ -806,7 +806,8 @@ contexts: EOF fi if [[ "${ENABLE_EGRESS_VIA_KONNECTIVITY_SERVICE:-false}" == "true" ]]; then - cat </etc/srv/kubernetes/egress_selector_configuration.yaml + if [[ "${KONNECTIVITY_SERVICE_PROXY_PROTOCOL_MODE:-grpc}" == 'grpc' ]]; then + cat </etc/srv/kubernetes/egress_selector_configuration.yaml apiVersion: apiserver.k8s.io/v1alpha1 kind: EgressSelectorConfiguration egressSelections: @@ -823,6 +824,28 @@ egressSelections: connection: proxyProtocol: Direct EOF + elif [[ "${KONNECTIVITY_SERVICE_PROXY_PROTOCOL_MODE:-grpc}" == 'http-connect' ]]; then + cat </etc/srv/kubernetes/egress_selector_configuration.yaml +apiVersion: apiserver.k8s.io/v1alpha1 +kind: EgressSelectorConfiguration +egressSelections: +- name: cluster + connection: + proxyProtocol: HTTPConnect + transport: + uds: + udsName: /etc/srv/kubernetes/konnectivity-server/konnectivity-server.socket +- name: master + connection: + proxyProtocol: Direct +- name: etcd + connection: + proxyProtocol: Direct +EOF + else + echo "KONNECTIVITY_SERVICE_PROXY_PROTOCOL_MODE must be set to either grpc or http-connect" + exit 1 + fi fi if [[ -n "${WEBHOOK_GKE_EXEC_AUTH:-}" ]]; then @@ -1660,7 +1683,15 @@ function prepare-konnectivity-server-manifest { params+=("--uds-name=/etc/srv/kubernetes/konnectivity-server/konnectivity-server.socket") params+=("--cluster-cert=/etc/srv/kubernetes/pki/apiserver.crt") params+=("--cluster-key=/etc/srv/kubernetes/pki/apiserver.key") - params+=("--mode=grpc") + if [[ "${KONNECTIVITY_SERVICE_PROXY_PROTOCOL_MODE:-grpc}" == 'grpc' ]]; then + params+=("--mode=grpc") + elif [[ "${KONNECTIVITY_SERVICE_PROXY_PROTOCOL_MODE:-grpc}" == 'http-connect' ]]; then + params+=("--mode=http-connect") + else + echo "KONNECTIVITY_SERVICE_PROXY_PROTOCOL_MODE must be set to either grpc or http-connect" + exit 1 + fi + params+=("--server-port=0") params+=("--agent-port=$1") params+=("--admin-port=$2") diff --git a/cluster/gce/util.sh b/cluster/gce/util.sh index 382cc653db1..082f6265dc2 100755 --- a/cluster/gce/util.sh +++ b/cluster/gce/util.sh @@ -1522,6 +1522,11 @@ EOF if [[ "${ENABLE_EGRESS_VIA_KONNECTIVITY_SERVICE:-false}" == "true" ]]; then cat >>$file <>$file <