Skip to content

Commit b1d08b6

Browse files
committed
Adds the controller for the Operand's Network Policy
1 parent e3fe1cf commit b1d08b6

20 files changed

+1178
-3
lines changed

api/v1alpha1/external_secrets_config_types.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package v1alpha1
22

33
import (
4+
networkingv1 "k8s.io/api/networking/v1"
45
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
56
)
67

@@ -67,6 +68,19 @@ type ExternalSecretsConfigSpec struct {
6768
// controllerConfig is for specifying the configurations for the controller to use while installing the `external-secrets` operand and the plugins.
6869
// +kubebuilder:validation:Optional
6970
ControllerConfig ControllerConfig `json:"controllerConfig,omitempty"`
71+
72+
// networkPolicies specifies the list of network policy configurations
73+
// to be applied to external-secrets pods.
74+
//
75+
// Each entry allows specifying a name for the generated NetworkPolicy object,
76+
// along with its full Kubernetes NetworkPolicy definition.
77+
//
78+
// If this field is not provided, external-secrets components will be isolated
79+
// with deny-all network policies, which will prevent proper operation.
80+
//
81+
// +kubebuilder:validation:Optional
82+
// +optional
83+
NetworkPolicies []NetworkPolicy `json:"networkPolicies,omitempty"`
7084
}
7185

7286
// ExternalSecretsConfigStatus is the most recently observed status of the ExternalSecretsConfig.
@@ -201,3 +215,40 @@ type CertProvidersConfig struct {
201215
// +kubebuilder:validation:Optional
202216
CertManager *CertManagerConfig `json:"certManager,omitempty"`
203217
}
218+
219+
// ComponentName represents the different external-secrets components that can have network policies applied.
220+
type ComponentName string
221+
222+
const (
223+
// CoreController represents the external-secrets component
224+
CoreController ComponentName = "ExternalSecretsCoreController"
225+
226+
// BitwardenSDKServer represents the bitwarden-sdk-server component
227+
BitwardenSDKServer ComponentName = "BitwardenSDKServer"
228+
)
229+
230+
// NetworkPolicy represents a custom network policy configuration for operator-managed components.
231+
// It includes a name for identification and the network policy rules to be enforced.
232+
type NetworkPolicy struct {
233+
// name is a unique identifier for this network policy configuration.
234+
// This name will be used as part of the generated NetworkPolicy resource name.
235+
// +kubebuilder:validation:Required
236+
// +required
237+
Name string `json:"name"`
238+
239+
// componentName specifies which external-secrets component this network policy applies to.
240+
// +kubebuilder:validation:Enum:=ExternalSecretsCoreController;BitwardenSDKServer
241+
// +kubebuilder:validation:Required
242+
ComponentName ComponentName `json:"componentName"`
243+
244+
// egress is a list of egress rules to be applied to the selected pods. Outgoing traffic
245+
// is allowed if there are no NetworkPolicies selecting the pod (and cluster policy
246+
// otherwise allows the traffic), OR if the traffic matches at least one egress rule
247+
// across all of the NetworkPolicy objects whose podSelector matches the pod. If
248+
// this field is empty then this NetworkPolicy limits all outgoing traffic (and serves
249+
// solely to ensure that the pods it selects are isolated by default).
250+
// The operator will automatically handle ingress rules based on the current running ports.
251+
// +optional
252+
// +listType=atomic
253+
Egress []networkingv1.NetworkPolicyEgressRule `json:"egress,omitempty" protobuf:"bytes,3,rep,name=egress"`
254+
}

api/v1alpha1/zz_generated.deepcopy.go

Lines changed: 30 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
apiVersion: networking.k8s.io/v1
2+
kind: NetworkPolicy
3+
metadata:
4+
name: allow-api-server-egress-for-bitwarden-sever
5+
namespace: external-secrets
6+
labels:
7+
app.kubernetes.io/name: bitwarden-sdk-server
8+
app.kubernetes.io/instance: external-secrets
9+
app.kubernetes.io/version: "v0.19.0"
10+
app.kubernetes.io/managed-by: external-secrets-operator
11+
spec:
12+
podSelector:
13+
matchLabels:
14+
app.kubernetes.io/name: external-secrets-bitwarden-server
15+
policyTypes:
16+
- Ingress
17+
- Egress
18+
ingress:
19+
# Allow External Secrets Controller to communicate with Bitwarden SDK Server
20+
- ports:
21+
- protocol: TCP
22+
port: 9998
23+
# Allow access to Kubernetes API server
24+
egress:
25+
- ports:
26+
- protocol: TCP
27+
port: 6443
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: networking.k8s.io/v1
2+
kind: NetworkPolicy
3+
metadata:
4+
name: allow-api-server-egress-for-cert-controller
5+
namespace: external-secrets
6+
labels:
7+
app.kubernetes.io/name: external-secrets-cert-controller
8+
app.kubernetes.io/instance: external-secrets
9+
app.kubernetes.io/version: "v0.19.0"
10+
app.kubernetes.io/managed-by: external-secrets-operator
11+
spec:
12+
podSelector:
13+
matchLabels:
14+
app.kubernetes.io/name: external-secrets-cert-controller
15+
policyTypes:
16+
- Egress
17+
egress:
18+
- ports:
19+
- protocol: TCP
20+
port: 6443
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: networking.k8s.io/v1
2+
kind: NetworkPolicy
3+
metadata:
4+
name: allow-api-server-egress
5+
namespace: external-secrets
6+
labels:
7+
app.kubernetes.io/name: external-secrets
8+
app.kubernetes.io/instance: external-secrets
9+
app.kubernetes.io/version: "v0.19.0"
10+
app.kubernetes.io/managed-by: external-secrets-operator
11+
spec:
12+
podSelector:
13+
matchLabels:
14+
app.kubernetes.io/name: external-secrets
15+
policyTypes:
16+
- Egress
17+
egress:
18+
- ports:
19+
- protocol: TCP
20+
port: 6443
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
apiVersion: networking.k8s.io/v1
2+
kind: NetworkPolicy
3+
metadata:
4+
name: allow-api-server-egress-for-webhook
5+
namespace: external-secrets
6+
labels:
7+
app.kubernetes.io/name: external-secrets-webhook
8+
app.kubernetes.io/instance: external-secrets
9+
app.kubernetes.io/version: "v0.19.0"
10+
app.kubernetes.io/managed-by: external-secrets-operator
11+
external-secrets.io/component: webhook
12+
spec:
13+
podSelector:
14+
matchLabels:
15+
app.kubernetes.io/name: external-secrets-webhook
16+
policyTypes:
17+
- Egress
18+
- Ingress
19+
egress:
20+
- ports:
21+
- protocol: TCP
22+
port: 6443
23+
ingress:
24+
- ports:
25+
- protocol: TCP
26+
port: 10250
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
apiVersion: networking.k8s.io/v1
2+
kind: NetworkPolicy
3+
metadata:
4+
name: deny-all-traffic
5+
namespace: external-secrets
6+
labels:
7+
app.kubernetes.io/name: external-secrets
8+
app.kubernetes.io/instance: external-secrets
9+
app.kubernetes.io/version: "v0.19.0"
10+
app.kubernetes.io/managed-by: external-secrets-operator
11+
spec:
12+
podSelector: {}
13+
policyTypes:
14+
- Ingress
15+
- Egress

bundle/manifests/external-secrets-operator.clusterserviceversion.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,18 @@ spec:
578578
- patch
579579
- update
580580
- watch
581+
- apiGroups:
582+
- networking.k8s.io
583+
resources:
584+
- networkpolicies
585+
verbs:
586+
- create
587+
- delete
588+
- get
589+
- list
590+
- patch
591+
- update
592+
- watch
581593
- apiGroups:
582594
- operator.openshift.io
583595
resources:

0 commit comments

Comments
 (0)