Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions deploy/05controller-deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ spec:
- configMapRef:
name: pf9-env
optional: true
- secretRef:
name: pf9-proxy-creds
optional: true
image: quay.io/platform9/vjailbreak-controller:main
imagePullPolicy: IfNotPresent
lifecycle:
Expand Down
3 changes: 3 additions & 0 deletions deploy/06vpwned-deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ spec:
- configMapRef:
name: pf9-env
optional: true
- secretRef:
name: pf9-proxy-creds
optional: true
image: quay.io/platform9/vjailbreak-vpwned:main
imagePullPolicy: IfNotPresent
name: vpwned
Expand Down
6 changes: 6 additions & 0 deletions deploy/installer.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5220,6 +5220,9 @@ spec:
- configMapRef:
name: pf9-env
optional: true
- secretRef:
name: pf9-proxy-creds
optional: true
image: quay.io/platform9/vjailbreak-controller:main
imagePullPolicy: IfNotPresent
lifecycle:
Expand Down Expand Up @@ -5325,6 +5328,9 @@ spec:
- configMapRef:
name: pf9-env
optional: true
- secretRef:
name: pf9-proxy-creds
optional: true
image: quay.io/platform9/vjailbreak-vpwned:main
imagePullPolicy: IfNotPresent
name: vpwned
Expand Down
3 changes: 3 additions & 0 deletions k8s/migration/config/addons/k8s.svc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ spec:
- configMapRef:
name: pf9-env
optional: true
- secretRef:
name: pf9-proxy-creds
optional: true
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
Expand Down
3 changes: 3 additions & 0 deletions k8s/migration/config/manager/manager.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@ spec:
- configMapRef:
name: pf9-env
optional: true
- secretRef:
name: pf9-proxy-creds
optional: true
args:
- --leader-elect=false
- --health-probe-bind-address=:8081
Expand Down
8 changes: 8 additions & 0 deletions k8s/migration/internal/controller/migrationplan_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -1294,6 +1294,14 @@ func (r *MigrationPlanReconciler) CreateJob(ctx context.Context,
},
},
})
envFrom = append(envFrom, corev1.EnvFromSource{
SecretRef: &corev1.SecretEnvSource{
LocalObjectReference: corev1.LocalObjectReference{
Name: "pf9-proxy-creds",
},
Optional: &pointtrue,
},
})
return envFrom
}(),
VolumeMounts: []corev1.VolumeMount{
Expand Down
57 changes: 47 additions & 10 deletions pkg/common/utils/net.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,27 @@ type VjbNet struct {
NoProxy string
UseProxyFromEnv bool
proxyCfg *httpproxy.Config

HTTPProxyUsername string
HTTPProxyPassword string
HTTPSProxyUsername string
HTTPSProxyPassword string
}

func withProxyCredentials(rawURL, username, password string) string {
if rawURL == "" || username == "" {
return rawURL
}
u, err := url.Parse(rawURL)
if err != nil || u.Host == "" {
u2, err2 := url.Parse("http://" + rawURL)
if err2 != nil || u2.Host == "" {
return rawURL
}
u = u2
}
u.User = url.UserPassword(username, password)
return u.String()
}

func (v *VjbNet) getNetTransport(tlsConfig *tls.Config) *http.Transport {
Expand Down Expand Up @@ -53,11 +74,14 @@ func (v *VjbNet) getNetTransport(tlsConfig *tls.Config) *http.Transport {
}

transport.Proxy = func(req *http.Request) (*url.URL, error) {
proxyURL, err := v.proxyCfg.ProxyFunc()(req.URL)
cfg := *v.proxyCfg
cfg.HTTPProxy = withProxyCredentials(cfg.HTTPProxy, v.HTTPProxyUsername, v.HTTPProxyPassword)
cfg.HTTPSProxy = withProxyCredentials(cfg.HTTPSProxy, v.HTTPSProxyUsername, v.HTTPSProxyPassword)

proxyURL, err := cfg.ProxyFunc()(req.URL)
if err != nil {
return nil, err
}
// Preserve existing logging behavior.
if proxyURL != nil {
fmt.Printf("Proxy config: HTTPProxy=%s, HTTPSProxy=%s, NoProxy=%s\n",
v.proxyCfg.HTTPProxy, v.proxyCfg.HTTPSProxy, v.proxyCfg.NoProxy)
Expand All @@ -80,9 +104,6 @@ func (v *VjbNet) CreateHTTPClient() error {
}
transport := v.getNetTransport(tlsConfig)

if v.UseProxyFromEnv {
transport.Proxy = http.ProxyFromEnvironment
}
v.Client = &http.Client{
Transport: transport,
Timeout: v.timeout,
Expand All @@ -102,10 +123,6 @@ func (v *VjbNet) CreateSecureHTTPClient() error {

transport := v.getNetTransport(tlsConfig)

if v.UseProxyFromEnv {
transport.Proxy = http.ProxyFromEnvironment
}

v.Client = &http.Client{
Transport: transport,
Timeout: v.timeout,
Expand Down Expand Up @@ -137,6 +154,16 @@ func (v *VjbNet) SetUseProxyFromEnv(use bool) {
v.UseProxyFromEnv = use
}

func (v *VjbNet) SetHTTPProxyCredentials(username, password string) {
v.HTTPProxyUsername = username
v.HTTPProxyPassword = password
}

func (v *VjbNet) SetHTTPSProxyCredentials(username, password string) {
v.HTTPSProxyUsername = username
v.HTTPSProxyPassword = password
}

func (v *VjbNet) GetClient() *http.Client {
return v.Client
}
Expand All @@ -157,9 +184,14 @@ func (v *VjbNet) proxy4URL(reqURL *url.URL) (*url.URL, error) {
if v.NoProxy != "" {
v.proxyCfg.NoProxy = v.NoProxy
}

cfg := *v.proxyCfg
cfg.HTTPProxy = withProxyCredentials(cfg.HTTPProxy, v.HTTPProxyUsername, v.HTTPProxyPassword)
cfg.HTTPSProxy = withProxyCredentials(cfg.HTTPSProxy, v.HTTPSProxyUsername, v.HTTPSProxyPassword)

// Delegate proxy decision to httpproxy's ProxyFunc for correct
// NO_PROXY and scheme handling.
proxyURL, err := v.proxyCfg.ProxyFunc()(reqURL)
proxyURL, err := cfg.ProxyFunc()(reqURL)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -207,6 +239,11 @@ func NewVjbNet() *VjbNet {
NoProxy: "",
UseProxyFromEnv: true,
proxyCfg: httpproxy.FromEnvironment(),

HTTPProxyUsername: os.Getenv("HTTP_PROXY_USERNAME"),
HTTPProxyPassword: os.Getenv("HTTP_PROXY_PASSWORD"),
HTTPSProxyUsername: os.Getenv("HTTPS_PROXY_USERNAME"),
HTTPSProxyPassword: os.Getenv("HTTPS_PROXY_PASSWORD"),
}
}

Expand Down
Loading
Loading