Skip to content
Open
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
21 changes: 21 additions & 0 deletions cmd/machine-config-operator/bootstrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ var (
infraImage string
releaseImage string
keepalivedImage string
frrK8sImage string
kubeVipImage string
mcoImage string
oauthProxyImage string
kubeRbacProxyImage string
Expand Down Expand Up @@ -68,6 +70,8 @@ func init() {
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.dependencyFiles.DNS, "dns-config-file", "/assets/manifests/cluster-dns-02-config.yml", "File containing dns.config.openshift.io manifest.")
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.dependencyFiles.AdditionalTrustBundle, "additional-trust-bundle-config-file", "/assets/manifests/user-ca-bundle-config.yaml", "File containing the additional user provided CA bundle manifest.")
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.keepalivedImage, "keepalived-image", "", "Image for Keepalived.")
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.frrK8sImage, "frr-k8s-image", "", "Image for frr-k8s.")
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.kubeVipImage, "kube-vip-image", "", "Image for kube-vip.")
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.corednsImage, "coredns-image", "", "Image for CoreDNS.")
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.haproxyImage, "haproxy-image", "", "Image for haproxy.")
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.baremetalRuntimeCfgImage, "baremetal-runtimecfg-image", "", "Image for baremetal-runtimecfg.")
Expand All @@ -78,6 +82,7 @@ func init() {
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.dockerRegistryImage, "docker-registry-image", "", "Image for docker-registry.")
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.imageReferences, "image-references", "", "File containing imagestreams (from cluster-version-operator)")
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.dependencyFiles.CloudProviderCA, "cloud-provider-ca-file", "", "path to cloud provider CA certificate")
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.dependencyFiles.BGPVIPConfig, "bgp-vip-config-file", "/assets/manifests/bgp-vip-config.yaml", "File containing the bgp-vip-config ConfigMap manifest (optional).")

}

Expand Down Expand Up @@ -142,6 +147,18 @@ func runBootstrapCmd(_ *cobra.Command, _ []string) {
if err != nil {
klog.Warningf("Base OS extensions container not found: %s", err)
}
// The frr-k8s and kube-vip images are only present in payloads that
// support BGP-based VIP management, so their absence is not fatal.
if img, err := findImage(imgstream, "metallb-frr"); err == nil {
bootstrapOpts.frrK8sImage = img
} else {
klog.Warningf("metallb-frr image not found in image references: %v", err)
}
if img, err := findImage(imgstream, "kube-vip"); err == nil {
bootstrapOpts.kubeVipImage = img
} else {
klog.Warningf("kube-vip image not found in image references: %v", err)
}
}

imgs := ctrlcommon.Images{
Expand All @@ -155,6 +172,8 @@ func runBootstrapCmd(_ *cobra.Command, _ []string) {
BaseOSContainerImage: bootstrapOpts.baseOSContainerImage,
BaseOSExtensionsContainerImage: bootstrapOpts.baseOSExtensionsContainerImage,
DockerRegistryBootstrap: bootstrapOpts.dockerRegistryImage,
FRRK8sBootstrap: bootstrapOpts.frrK8sImage,
KubeVIPBootstrap: bootstrapOpts.kubeVipImage,
},
ControllerConfigImages: ctrlcommon.ControllerConfigImages{
InfraImage: bootstrapOpts.infraImage,
Expand All @@ -163,6 +182,8 @@ func runBootstrapCmd(_ *cobra.Command, _ []string) {
Haproxy: bootstrapOpts.haproxyImage,
BaremetalRuntimeCfg: bootstrapOpts.baremetalRuntimeCfgImage,
DockerRegistry: bootstrapOpts.dockerRegistryImage,
FRRK8s: bootstrapOpts.frrK8sImage,
KubeVip: bootstrapOpts.kubeVipImage,
},
}

Expand Down
13 changes: 9 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/openshift/machine-config-operator

go 1.25.3
go 1.26.0

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
rg -n --hidden \
  -g 'go.mod' -g 'go.work' -g 'Dockerfile*' -g '*.yml' -g '*.yaml' -g 'Makefile' \
  'go1\.26|GO_VERSION|golang:' .

Repository: openshift/machine-config-operator

Length of output: 2936


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== go.mod ==\n'
cat -n go.mod

printf '\n== go toolchain / version directives in repo ==\n'
rg -n --hidden --glob '!vendor/**' '^[[:space:]]*(toolchain|go)[[:space:]]' go.mod go.work .github . || true

printf '\n== CI Go version pins ==\n'
rg -n --hidden --glob '!vendor/**' 'go-version|GO_VERSION|golang:' .github . || true

Repository: openshift/machine-config-operator

Length of output: 38773


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== workflow files ==\n'
fd -t f '.*\.(yml|yaml)$' .github 2>/dev/null || true

printf '\n== setup-go / toolchain references ==\n'
rg -n --hidden --glob '!vendor/**' --glob '.github/**/*.yml' --glob '.github/**/*.yaml' \
  'setup-go|go-version|toolchain|GOTOOLCHAIN|golang:' .github . || true

Repository: openshift/machine-config-operator

Length of output: 232


🌐 Web query:

Go 1.26.5 release notes security fixes July 7 2026

💡 Result:

Go 1.26.5 was released on July 7, 2026 [1][2]. This minor point release includes two critical security fixes along with various bug fixes for the compiler, runtime, go command, and several standard library packages [1][3]. The two security vulnerabilities addressed in this release are: 1. os: Root escape via symlink plus trailing slash (CVE-2026-39822) On Unix systems, the os.Root functionality improperly followed symbolic links to locations outside the intended root directory when the final path component was a symbolic link and the path ended with a trailing slash [2][4]. This failure to account for openat behavior with trailing slashes allowed paths to escape the root. The issue has been resolved by properly sanitizing the path parameter [4][5]. 2. crypto/tls: Encrypted Client Hello privacy leak (CVE-2026-42505) The Encrypted Client Hello (ECH) implementation leaked pre-shared key (PSK) identities during the handshake [2][6]. This vulnerability could allow a passive network observer to de-anonymize the server's hostname even when ECH was in use [4][5]. Additional updates in Go 1.26.5 include bug fixes for the compiler, runtime, the go command, and the net, os, and syscall packages [1][3]. Detailed technical changes can be found in the official Go release history [1][7].

Citations:


Pin a patched Go toolchain. go 1.26.0 leaves this repo on the initial 1.26 release, and there’s no toolchain or CI version pin here. Bump to at least go 1.26.5 or enforce a newer toolchain in CI.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@go.mod` at line 3, Update the go directive in go.mod from Go 1.26.0 to at
least Go 1.26.5, ensuring the repository uses a patched Go 1.26 toolchain;
alternatively, add an equivalent newer toolchain pin in the project’s CI
configuration.


require (
github.com/Azure/ARO-RP v0.0.0-20250602035759-0693f32d5ccc
Expand Down Expand Up @@ -57,9 +57,9 @@ require (
golang.org/x/net v0.56.0
golang.org/x/time v0.11.0
google.golang.org/grpc v1.79.3
k8s.io/api v0.35.1
k8s.io/api v0.36.2
k8s.io/apiextensions-apiserver v0.35.1
k8s.io/apimachinery v0.35.1
k8s.io/apimachinery v0.36.2
k8s.io/client-go v0.35.1
k8s.io/code-generator v0.35.1
k8s.io/component-base v0.35.1
Expand Down Expand Up @@ -422,7 +422,7 @@ require (
golang.org/x/term v0.45.0 // indirect
golang.org/x/text v0.40.0 // indirect
golang.org/x/tools v0.47.0 // indirect
google.golang.org/protobuf v1.36.10 // indirect
google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af // indirect

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
go list -m -json google.golang.org/protobuf
go mod graph | rg 'google\.golang\.org/protobuf'
git ls-remote --tags https://github.com/protocolbuffers/protobuf-go.git 'v1.36.*'

Repository: openshift/machine-config-operator

Length of output: 8699


Avoid the protobuf pseudo-version google.golang.org/protobuf is pinned to unreleased v1.36.12-0.20260120151049-f2248ac996af with no matching tagged v1.36.12 release. Switch to a tagged version, or document a temporary exception if this commit is required.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@go.mod` at line 425, Update the google.golang.org/protobuf dependency in
go.mod from the unreleased pseudo-version to an available tagged release; only
retain the pseudo-version if this specific commit is required, and document that
temporary exception.

Source: Path instructions

gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v2 v2.4.0
gopkg.in/yaml.v3 v3.0.1
Expand Down Expand Up @@ -473,3 +473,8 @@ replace (
k8s.io/sample-cli-plugin => github.com/openshift/kubernetes/staging/src/k8s.io/sample-cli-plugin v0.0.0-20260305123649-d18f3f005eaa
k8s.io/sample-controller => github.com/openshift/kubernetes/staging/src/k8s.io/sample-controller v0.0.0-20260305123649-d18f3f005eaa
)

// TEMPORARY (OPNET-780): pin to the openshift/api#2923 content until that PR
// merges; this replace is then dropped in a one-commit swap to the upstream
// module (see the vendor commit message and PR description).
replace github.com/openshift/api => github.com/mkowalski/openshift-api v0.0.0-20260720204730-3b96df04543d
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Comment thread
coderabbitai[bot] marked this conversation as resolved.
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -601,6 +601,8 @@ github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQ
github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mkowalski/openshift-api v0.0.0-20260720204730-3b96df04543d h1:rTJXtBn6UMoJgX2FO80cUQzn2IP8rGISPMtBMTSyctM=
github.com/mkowalski/openshift-api v0.0.0-20260720204730-3b96df04543d/go.mod h1:k6qH5QOVa5GDln2VVm8Jz4NV3Z7R2SATHFLwGS6Wh3M=
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU=
Expand Down Expand Up @@ -667,8 +669,6 @@ github.com/opencontainers/selinux v1.13.0 h1:Zza88GWezyT7RLql12URvoxsbLfjFx988+L
github.com/opencontainers/selinux v1.13.0/go.mod h1:XxWTed+A/s5NNq4GmYScVy+9jzXhGBVEOAyucdRUY8s=
github.com/openshift-eng/openshift-tests-extension v0.0.0-20260127124016-0fed2b824818 h1:jJLE/aCAqDf8U4wc3bE1IEKgIxbb0ICjCNVFA49x/8s=
github.com/openshift-eng/openshift-tests-extension v0.0.0-20260127124016-0fed2b824818/go.mod h1:6gkP5f2HL0meusT0Aim8icAspcD1cG055xxBZ9yC68M=
github.com/openshift/api v0.0.0-20260702202555-ef71f942ef6c h1:X1B6zMjD7kmKcuv9Cxs4Zhq/ruJLt7BsywSWKOA9Jn4=
github.com/openshift/api v0.0.0-20260702202555-ef71f942ef6c/go.mod h1:7WJ3IPaK6nmWT8bDcaNooHqd0H5WepjVqV/10VlkMEM=
github.com/openshift/client-go v0.0.0-20260703082747-24d059aea27a h1:RfmstmmWz5/23/Tt8gBipICzC1VHQLgGBeQUQ1aWoUA=
github.com/openshift/client-go v0.0.0-20260703082747-24d059aea27a/go.mod h1:fNuXvm6bMJff2AxiRb9CR5L3a9CLzVgcoSmHZ3l7FgU=
github.com/openshift/kubernetes v1.30.1-0.20260305123649-d18f3f005eaa h1:/gPMWR7fdCC3S4wHALD6Em+vztl1q9/cOpdMkFZwDus=
Expand Down Expand Up @@ -1212,8 +1212,8 @@ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQ
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af h1:+5/Sw3GsDNlEmu7TfklWKPdQ0Ykja5VEmq2i817+jbI=
google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/DATA-DOG/go-sqlmock.v1 v1.3.0 h1:FVCohIoYO7IJoDDVpV2pdq7SgrMH6wHnuTyrdrxJNoY=
gopkg.in/DATA-DOG/go-sqlmock.v1 v1.3.0/go.mod h1:OdE7CF6DbADk7lN8LIKRzRJTTZXIjtWgA5THM5lhBAw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
Expand Down
31 changes: 31 additions & 0 deletions install/0000_80_machine-config_00_rbac.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -224,3 +224,34 @@ subjects:
roleRef:
kind: Role
name: host-networking-services
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: machine-config-operator-bgp-vip
namespace: openshift-network-operator
annotations:
include.release.openshift.io/self-managed-high-availability: "true"
include.release.openshift.io/single-node-developer: "true"
rules:
- apiGroups: [""]
resources: ["configmaps"]
resourceNames: ["bgp-vip-config"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: machine-config-operator-bgp-vip
namespace: openshift-network-operator
annotations:
include.release.openshift.io/self-managed-high-availability: "true"
include.release.openshift.io/single-node-developer: "true"
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: machine-config-operator-bgp-vip
subjects:
- kind: ServiceAccount
name: machine-config-operator
namespace: openshift-machine-config-operator
4 changes: 3 additions & 1 deletion install/0000_80_machine-config_02_images.configmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,7 @@ data:
"baremetalRuntimeCfgImage": "placeholder.url.oc.will.replace.this.org/placeholdernamespace:baremetal-runtimecfg",
"oauthProxy": "placeholder.url.oc.will.replace.this.org/placeholdernamespace:oauth-proxy",
"kubeRbacProxy": "placeholder.url.oc.will.replace.this.org/placeholdernamespace:kube-rbac-proxy",
"dockerRegistryImage": "placeholder.url.oc.will.replace.this.org/placeholdernamespace:docker-registry"
"dockerRegistryImage": "placeholder.url.oc.will.replace.this.org/placeholdernamespace:docker-registry",
"frrK8sImage": "placeholder.url.oc.will.replace.this.org/placeholdernamespace:metallb-frr",
"kubeVipImage": "placeholder.url.oc.will.replace.this.org/placeholdernamespace:kube-vip"
}
8 changes: 8 additions & 0 deletions install/image-references
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,11 @@ spec:
from:
kind: DockerImage
name: placeholder.url.oc.will.replace.this.org/placeholdernamespace:docker-registry
- name: metallb-frr
from:
kind: DockerImage
name: placeholder.url.oc.will.replace.this.org/placeholdernamespace:metallb-frr
- name: kube-vip
from:
kind: DockerImage
name: placeholder.url.oc.will.replace.this.org/placeholdernamespace:kube-vip
165 changes: 165 additions & 0 deletions manifests/on-prem/0000-frr-k8s.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
---
kind: Pod
apiVersion: v1
metadata:
name: frr-k8s
namespace: openshift-frr-k8s
labels:
app: frr-k8s
spec:
# hostNetwork: the BGP session must originate from the node IP and the
# advertised VIP routes live in the host routing table (keepalived parity).
hostNetwork: true
shareProcessNamespace: true
priorityClassName: system-node-critical
# 10s (not the upstream DaemonSet's 0): a SIGTERM'd bgpd sends a Cease
# NOTIFICATION, which hard-resets the session; after a SIGKILL a peer in
# graceful-restart helper mode may retain stale VIP routes on bare TCP
# loss until the restart timer expires.
terminationGracePeriodSeconds: 10
tolerations:
- operator: Exists
initContainers:
- name: render-config-frr
image: {{ .Images.BaremetalRuntimeCfgBootstrap }}
command:
- /usr/bin/runtimecfg
- render
- /etc/kubernetes/kubeconfig
- --api-vips
- {{ onPremPlatformAPIServerInternalIP .ControllerConfig }}
- --ingress-vips
- {{ onPremPlatformIngressIP .ControllerConfig }}
- "--cluster-config"
- "/opt/openshift/manifests/cluster-config.yaml"
- /config/frr.conf.tmpl
- --out-dir
- /etc/frr
- --peer-file
- /config/frr-peers.json
env:
- name: IS_BOOTSTRAP
value: "yes"
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
resources:
requests:
cpu: 10m
memory: 50Mi
limits:
cpu: 100m
memory: 128Mi
terminationMessagePolicy: FallbackToLogsOnError
volumeMounts:
- name: resource-dir
mountPath: /config
readOnly: true
- name: frr-conf
mountPath: /etc/frr
- name: kubeconfig
mountPath: /etc/kubernetes
readOnly: true
- name: manifests
mountPath: "/opt/openshift/manifests"
mountPropagation: HostToContainer
Comment thread
coderabbitai[bot] marked this conversation as resolved.
readOnly: true
- name: cp-frr-files
image: {{ .Images.FRRK8sBootstrap }}
command:
- /bin/sh
- -c
- |
set -eu
cp -f /tmp/frr/daemons /etc/frr/daemons
cp -f /tmp/frr/vtysh.conf /etc/frr/vtysh.conf
Comment thread
coderabbitai[bot] marked this conversation as resolved.
securityContext:
runAsUser: 100
runAsGroup: 101
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
resources:
requests:
cpu: 10m
memory: 20Mi
limits:
cpu: 100m
memory: 128Mi
terminationMessagePolicy: FallbackToLogsOnError
volumeMounts:
- name: frr-startup
mountPath: /tmp/frr
readOnly: true
- name: frr-conf
mountPath: /etc/frr
Comment thread
coderabbitai[bot] marked this conversation as resolved.
containers:
- name: frr
image: {{ .Images.FRRK8sBootstrap }}
command:
- /bin/sh
- -c
- /sbin/tini -- /usr/lib/frr/docker-start
env:
- name: TINI_SUBREAPER
value: "true"
resources:
requests:
cpu: 100m
memory: 200Mi
limits:
cpu: 500m
memory: 512Mi
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
# Mirrors the frr container of the frr-k8s DaemonSet shipped by CNO
# (upstream metallb/frr-k8s parity). No drop ALL: FRR's
# privilege-separated startup (watchfrr as root spawning daemons as
# the frr user) additionally relies on root's implicit capabilities
# (SETUID/SETGID/DAC_OVERRIDE/CHOWN); dropping ALL and re-adding
# only the network capabilities was tested and prevents the FRR
# daemons from starting. SYS_ADMIN is required by docker-start/
# watchfrr process supervision.
add:
- NET_ADMIN
- NET_RAW
- SYS_ADMIN
- NET_BIND_SERVICE
Comment thread
coderabbitai[bot] marked this conversation as resolved.
terminationMessagePolicy: FallbackToLogsOnError
volumeMounts:
- name: frr-sockets
mountPath: /var/run/frr
- name: frr-conf
mountPath: /etc/frr
- name: frr-lib
mountPath: /var/lib/frr
- name: frr-tmp
mountPath: /var/tmp/frr
Comment thread
coderabbitai[bot] marked this conversation as resolved.
volumes:
- name: resource-dir
hostPath:
path: /etc/kubernetes/static-pod-resources/frr-k8s
- name: frr-conf
emptyDir: {}
- name: frr-sockets
emptyDir: {}
- name: frr-lib
emptyDir: {}
- name: frr-tmp
emptyDir: {}
- name: frr-startup
hostPath:
path: /etc/kubernetes/static-pod-resources/frr-k8s/startup
- name: kubeconfig
hostPath:
path: /etc/kubernetes
- name: manifests
hostPath:
path: "/opt/openshift/manifests"
Loading