Skip to content

Commit b63a64a

Browse files
committed
support proxy mode
Signed-off-by: Haywood Shannon <[email protected]>
1 parent 2d92b93 commit b63a64a

File tree

7 files changed

+75
-28
lines changed

7 files changed

+75
-28
lines changed

cmd/nginx-ingress/flags.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ var (
114114
`Path to the TransportServer NGINX configuration template for a TransportServer resource.
115115
(default for NGINX "nginx.transportserver.tmpl"; default for NGINX Plus "nginx-plus.transportserver.tmpl")`)
116116

117+
oidcTemplatePath = flag.String("oidc-template-path", "",
118+
`Path to the OIDC NGINX configuration template.
119+
(default for NGINX Plus "oidc.tmpl")`)
120+
117121
externalService = flag.String("external-service", "",
118122
`Specifies the name of the service with the type LoadBalancer through which the Ingress Controller pods are exposed externally.
119123
The external address of the service is used when reporting the status of Ingress, VirtualServer and VirtualServerRoute resources. For Ingress resources only: Requires -report-ingress-status.`)
@@ -429,7 +433,7 @@ func mustValidateFlags(ctx context.Context) {
429433
nl.Fatal(l, "ingresslink and external-service cannot both be set")
430434
}
431435

432-
if *nginxPlus && *mgmtConfigMap == "" {
436+
if *nginxPlus && *mgmtConfigMap == "" && *proxyURL == "" {
433437
nl.Fatal(l, "NGINX Plus requires a mgmt ConfigMap to be set")
434438
}
435439
}

cmd/nginx-ingress/main.go

Lines changed: 60 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,10 @@ func main() {
9090
ctx := initLogger(*logFormat, logLevels[*logLevel], os.Stdout)
9191
l := nl.LoggerFromContext(ctx)
9292

93-
cleanupSocketFiles(l)
93+
// TODO: Use fake manager
94+
if *proxyURL == "" {
95+
cleanupSocketFiles(l)
96+
}
9497

9598
initValidate(ctx)
9699
parsedFlags := os.Args[1:]
@@ -103,10 +106,36 @@ func main() {
103106
if err := validateKubernetesVersionInfo(ctx, kubeClient); err != nil {
104107
nl.Fatal(l, err)
105108
}
106-
pod, err := kubeClient.CoreV1().Pods(controllerNamespace).Get(context.TODO(), podName, meta_v1.GetOptions{})
107-
if err != nil {
108-
nl.Fatalf(l, "Failed to get pod: %v", err)
109+
110+
var pod *api_v1.Pod
111+
112+
if *proxyURL != "" {
113+
if controllerNamespace == "" {
114+
controllerNamespace = "nginx-ingress"
115+
}
116+
if podName == "" {
117+
podName = "nginx-ingress-controller-proxy-mode"
118+
}
119+
pod = &api_v1.Pod{
120+
ObjectMeta: meta_v1.ObjectMeta{
121+
Name: podName,
122+
Namespace: controllerNamespace,
123+
OwnerReferences: []meta_v1.OwnerReference{
124+
{
125+
Kind: "Deployment",
126+
Name: "nginx-ingress-controller-proxy-mode",
127+
},
128+
},
129+
},
130+
}
131+
} else {
132+
var err error
133+
pod, err = kubeClient.CoreV1().Pods(controllerNamespace).Get(context.TODO(), podName, meta_v1.GetOptions{})
134+
if err != nil {
135+
nl.Fatalf(l, "Failed to get pod: %v", err)
136+
}
109137
}
138+
110139
eventBroadcaster := record.NewBroadcaster()
111140
eventBroadcaster.StartLogging(func(format string, args ...interface{}) {
112141
nl.Infof(l, format, args...)
@@ -129,13 +158,13 @@ func main() {
129158

130159
var licenseReporter *license_reporting.LicenseReporter
131160

132-
if *nginxPlus {
161+
if *nginxPlus && *proxyURL == "" {
133162
licenseReporter = license_reporting.NewLicenseReporter(kubeClient, eventRecorder, pod)
134163
}
135164

136165
var deploymentMetadata *metadata.Metadata
137166

138-
if *agent {
167+
if *agent && *proxyURL == "" {
139168
deploymentMetadata = metadata.NewMetadataReporter(kubeClient, pod, version)
140169
}
141170

@@ -156,15 +185,28 @@ func main() {
156185
}
157186

158187
var agentVersion string
159-
if *agent {
188+
if *agent && *proxyURL == "" {
160189
agentVersion = getAgentVersionInfo(nginxManager)
161190
}
162191

163-
go updateSelfWithVersionInfo(ctx, eventRecorder, kubeClient, version, appProtectVersion, agentVersion, nginxVersion, 10, time.Second*5)
192+
// Skip pod label updates in proxy mode since the pod may not exist or be accessible
193+
if *proxyURL == "" {
194+
go updateSelfWithVersionInfo(ctx, eventRecorder, kubeClient, version, appProtectVersion, agentVersion, nginxVersion, 10, time.Second*5)
195+
}
164196

165197
var mgmtCfgParams *configs.MGMTConfigParams
166198
if *nginxPlus {
167-
mgmtCfgParams = processMGMTConfigMap(kubeClient, configs.NewDefaultMGMTConfigParams(ctx), eventRecorder, pod)
199+
if *proxyURL == "" {
200+
mgmtCfgParams = processMGMTConfigMap(kubeClient, configs.NewDefaultMGMTConfigParams(ctx), eventRecorder, pod)
201+
} else {
202+
// In proxy mode, also process the mgmt configmap if specified
203+
if *mgmtConfigMap != "" {
204+
mgmtCfgParams = processMGMTConfigMap(kubeClient, configs.NewDefaultMGMTConfigParams(ctx), eventRecorder, pod)
205+
} else {
206+
mgmtCfgParams = configs.NewDefaultMGMTConfigParams(ctx)
207+
}
208+
}
209+
168210
if err := processLicenseSecret(kubeClient, nginxManager, mgmtCfgParams, controllerNamespace); err != nil {
169211
logEventAndExit(ctx, eventRecorder, pod, secretErrorReason, err)
170212
}
@@ -176,7 +218,6 @@ func main() {
176218
if err := processClientAuthSecret(kubeClient, nginxManager, mgmtCfgParams, controllerNamespace); err != nil {
177219
logEventAndExit(ctx, eventRecorder, pod, secretErrorReason, err)
178220
}
179-
180221
}
181222

182223
templateExecutor, templateExecutorV2 := createTemplateExecutors(ctx)
@@ -236,12 +277,10 @@ func main() {
236277
DefaultCABundle: caBundlePath,
237278
}
238279

239-
if *nginxPlus {
240-
if cfgParams.ZoneSync.Enable && cfgParams.ZoneSync.Port != 0 {
241-
err := createAndValidateHeadlessService(ctx, kubeClient, cfgParams, controllerNamespace, pod)
242-
if err != nil {
243-
logEventAndExit(ctx, eventRecorder, pod, nl.EventReasonServiceFailedToCreate, err)
244-
}
280+
if *nginxPlus && cfgParams.ZoneSync.Enable && cfgParams.ZoneSync.Port != 0 {
281+
err := createAndValidateHeadlessService(ctx, kubeClient, cfgParams, controllerNamespace, pod)
282+
if err != nil {
283+
logEventAndExit(ctx, eventRecorder, pod, nl.EventReasonServiceFailedToCreate, err)
245284
}
246285
}
247286

@@ -255,7 +294,7 @@ func main() {
255294
process := startChildProcesses(nginxManager, appProtectV5)
256295

257296
plusClient := createPlusClient(ctx, *nginxPlus, useFakeNginxManager, nginxManager)
258-
if *nginxPlus {
297+
if *nginxPlus && *proxyURL == "" {
259298
licenseReporter.Config.PlusClient = plusClient
260299
}
261300

@@ -570,6 +609,9 @@ func createTemplateExecutors(ctx context.Context) (*version1.TemplateExecutor, *
570609
if *transportServerTemplatePath != "" {
571610
nginxTransportServerTemplatePath = *transportServerTemplatePath
572611
}
612+
if *oidcTemplatePath != "" {
613+
nginxOIDCConfTemplatePath = *oidcTemplatePath
614+
}
573615

574616
templateExecutor, err := version1.NewTemplateExecutor(nginxConfTemplatePath, nginxIngressTemplatePath)
575617
if err != nil {
@@ -588,7 +630,7 @@ func createNginxManager(ctx context.Context, managerCollector collectors.Manager
588630
useFakeNginxManager := *proxyURL != ""
589631
var nginxManager nginx.Manager
590632
if useFakeNginxManager {
591-
nginxManager = nginx.NewFakeManager("/etc/nginx")
633+
nginxManager = nginx.NewFakeManager(ctx, "/etc/nginx")
592634
} else {
593635
timeout := time.Duration(*nginxReloadTimeout) * time.Millisecond
594636
nginxManager = nginx.NewLocalManager(ctx, "/etc/nginx/", *nginxDebug, managerCollector, licenseReporter, deploymentMetadata, timeout, *nginxPlus)

internal/configs/configurator_bench_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func createTestConfiguratorBench() (*Configurator, error) {
2323
return nil, err
2424
}
2525

26-
manager := nginx.NewFakeManager("/etc/nginx")
26+
manager := nginx.NewFakeManager(context.Background(), "/etc/nginx")
2727
cnf := NewConfigurator(ConfiguratorParams{
2828
NginxManager: manager,
2929
StaticCfgParams: createTestStaticConfigParams(),

internal/configs/configurator_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func createTestConfigurator(t *testing.T) *Configurator {
4747
t.Fatal(err)
4848
}
4949

50-
manager := nginx.NewFakeManager("/etc/nginx")
50+
manager := nginx.NewFakeManager(context.Background(), "/etc/nginx")
5151
cnf := NewConfigurator(ConfiguratorParams{
5252
NginxManager: manager,
5353
StaticCfgParams: createTestStaticConfigParams(),
@@ -79,7 +79,7 @@ func createTestConfiguratorInvalidIngressTemplate(t *testing.T) *Configurator {
7979
t.Fatal(err)
8080
}
8181

82-
manager := nginx.NewFakeManager("/etc/nginx")
82+
manager := nginx.NewFakeManager(context.Background(), "/etc/nginx")
8383
cnf := NewConfigurator(ConfiguratorParams{
8484
NginxManager: manager,
8585
StaticCfgParams: createTestStaticConfigParams(),

internal/configs/version1/template_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package version1
22

33
import (
44
"bytes"
5+
"context"
56
"os"
67
"strconv"
78
"strings"
@@ -13,7 +14,7 @@ import (
1314
"github.com/nginx/kubernetes-ingress/internal/nginx"
1415
)
1516

16-
var fakeManager = nginx.NewFakeManager("/etc/nginx")
17+
var fakeManager = nginx.NewFakeManager(context.Background(), "/etc/nginx")
1718

1819
func TestMain(m *testing.M) {
1920
v := m.Run()

internal/nginx/fake_manager.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package nginx
22

33
import (
4+
"context"
45
"log/slog"
56
"net/http"
67
"os"
78
"path"
89

910
nl "github.com/nginx/kubernetes-ingress/internal/logger"
10-
nic_glog "github.com/nginx/kubernetes-ingress/internal/logger/glog"
11-
"github.com/nginx/kubernetes-ingress/internal/logger/levels"
1211
"github.com/nginx/nginx-plus-go-client/v3/client"
1312
)
1413

@@ -21,12 +20,13 @@ type FakeManager struct {
2120
}
2221

2322
// NewFakeManager creates a FakeManager.
24-
func NewFakeManager(confPath string) *FakeManager {
23+
func NewFakeManager(ctx context.Context, confPath string) *FakeManager {
24+
l := nl.LoggerFromContext(ctx)
2525
return &FakeManager{
2626
confdPath: path.Join(confPath, "conf.d"),
2727
secretsPath: path.Join(confPath, "secrets"),
2828
dhparamFilename: path.Join(confPath, "secrets", "dhparam.pem"),
29-
logger: slog.New(nic_glog.New(os.Stdout, &nic_glog.Options{Level: levels.LevelInfo})),
29+
logger: l,
3030
}
3131
}
3232

internal/telemetry/collector_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2651,7 +2651,7 @@ func newConfigurator(t *testing.T) *configs.Configurator {
26512651
t.Fatal(err)
26522652
}
26532653

2654-
manager := nginx.NewFakeManager("/etc/nginx")
2654+
manager := nginx.NewFakeManager(context.Background(), "/etc/nginx")
26552655
cnf := configs.NewConfigurator(configs.ConfiguratorParams{
26562656
NginxManager: manager,
26572657
StaticCfgParams: &configs.StaticConfigParams{

0 commit comments

Comments
 (0)