Skip to content

Commit e8973ac

Browse files
author
OpenShift Bot
authored
Merge pull request #13062 from pravisankar/cherrypick-12982
Merged by openshift-bot
2 parents 3ac8799 + a3cbf68 commit e8973ac

File tree

15 files changed

+73
-53
lines changed

15 files changed

+73
-53
lines changed

contrib/completions/bash/oadm

+2
Original file line numberDiff line numberDiff line change
@@ -2107,6 +2107,8 @@ _oadm_diagnostics()
21072107
local_nonpersistent_flags+=("--master-config=")
21082108
flags+=("--network-logdir=")
21092109
local_nonpersistent_flags+=("--network-logdir=")
2110+
flags+=("--network-pod-image=")
2111+
local_nonpersistent_flags+=("--network-pod-image=")
21102112
flags+=("--node-config=")
21112113
local_nonpersistent_flags+=("--node-config=")
21122114
flags+=("--prevent-modification")

contrib/completions/bash/oc

+2
Original file line numberDiff line numberDiff line change
@@ -2204,6 +2204,8 @@ _oc_adm_diagnostics()
22042204
local_nonpersistent_flags+=("--master-config=")
22052205
flags+=("--network-logdir=")
22062206
local_nonpersistent_flags+=("--network-logdir=")
2207+
flags+=("--network-pod-image=")
2208+
local_nonpersistent_flags+=("--network-pod-image=")
22072209
flags+=("--node-config=")
22082210
local_nonpersistent_flags+=("--node-config=")
22092211
flags+=("--prevent-modification")

contrib/completions/bash/openshift

+4
Original file line numberDiff line numberDiff line change
@@ -2107,6 +2107,8 @@ _openshift_admin_diagnostics()
21072107
local_nonpersistent_flags+=("--master-config=")
21082108
flags+=("--network-logdir=")
21092109
local_nonpersistent_flags+=("--network-logdir=")
2110+
flags+=("--network-pod-image=")
2111+
local_nonpersistent_flags+=("--network-pod-image=")
21102112
flags+=("--node-config=")
21112113
local_nonpersistent_flags+=("--node-config=")
21122114
flags+=("--prevent-modification")
@@ -7188,6 +7190,8 @@ _openshift_cli_adm_diagnostics()
71887190
local_nonpersistent_flags+=("--master-config=")
71897191
flags+=("--network-logdir=")
71907192
local_nonpersistent_flags+=("--network-logdir=")
7193+
flags+=("--network-pod-image=")
7194+
local_nonpersistent_flags+=("--network-pod-image=")
71917195
flags+=("--node-config=")
71927196
local_nonpersistent_flags+=("--node-config=")
71937197
flags+=("--prevent-modification")

contrib/completions/zsh/oadm

+2
Original file line numberDiff line numberDiff line change
@@ -2255,6 +2255,8 @@ _oadm_diagnostics()
22552255
local_nonpersistent_flags+=("--master-config=")
22562256
flags+=("--network-logdir=")
22572257
local_nonpersistent_flags+=("--network-logdir=")
2258+
flags+=("--network-pod-image=")
2259+
local_nonpersistent_flags+=("--network-pod-image=")
22582260
flags+=("--node-config=")
22592261
local_nonpersistent_flags+=("--node-config=")
22602262
flags+=("--prevent-modification")

contrib/completions/zsh/oc

+2
Original file line numberDiff line numberDiff line change
@@ -2352,6 +2352,8 @@ _oc_adm_diagnostics()
23522352
local_nonpersistent_flags+=("--master-config=")
23532353
flags+=("--network-logdir=")
23542354
local_nonpersistent_flags+=("--network-logdir=")
2355+
flags+=("--network-pod-image=")
2356+
local_nonpersistent_flags+=("--network-pod-image=")
23552357
flags+=("--node-config=")
23562358
local_nonpersistent_flags+=("--node-config=")
23572359
flags+=("--prevent-modification")

contrib/completions/zsh/openshift

+4
Original file line numberDiff line numberDiff line change
@@ -2255,6 +2255,8 @@ _openshift_admin_diagnostics()
22552255
local_nonpersistent_flags+=("--master-config=")
22562256
flags+=("--network-logdir=")
22572257
local_nonpersistent_flags+=("--network-logdir=")
2258+
flags+=("--network-pod-image=")
2259+
local_nonpersistent_flags+=("--network-pod-image=")
22582260
flags+=("--node-config=")
22592261
local_nonpersistent_flags+=("--node-config=")
22602262
flags+=("--prevent-modification")
@@ -7336,6 +7338,8 @@ _openshift_cli_adm_diagnostics()
73367338
local_nonpersistent_flags+=("--master-config=")
73377339
flags+=("--network-logdir=")
73387340
local_nonpersistent_flags+=("--network-logdir=")
7341+
flags+=("--network-pod-image=")
7342+
local_nonpersistent_flags+=("--network-pod-image=")
73397343
flags+=("--node-config=")
73407344
local_nonpersistent_flags+=("--node-config=")
73417345
flags+=("--prevent-modification")

hack/build-images.sh

-1
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,6 @@ image "${tag_prefix}-docker-builder" images/builder/docker/docker-builder
140140
image "${tag_prefix}-sti-builder" images/builder/docker/sti-builder
141141
image "${tag_prefix}-f5-router" images/router/f5
142142
image openshift/node images/node
143-
image openshift/diagnostics-deployer images/diagnostics
144143

145144
# extra images (not part of infrastructure)
146145
image openshift/hello-openshift examples/hello-openshift

images/diagnostics/Dockerfile

-9
This file was deleted.

images/diagnostics/scripts/openshift-network-debug

-37
This file was deleted.

pkg/cmd/admin/diagnostics/client.go

+1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ func (o DiagnosticsOptions) buildClientDiagnostics(rawConfig *clientcmdapi.Confi
6262
Factory: o.Factory,
6363
PreventModification: o.PreventModification,
6464
LogDir: o.NetworkDiagLogDir,
65+
PodImage: o.NetworkDiagPodImage,
6566
})
6667
default:
6768
return nil, false, fmt.Errorf("unknown diagnostic: %v", diagnosticName)

pkg/cmd/admin/diagnostics/diagnostics.go

+3
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ type DiagnosticsOptions struct {
4444
PreventModification bool
4545
// Path to store network diagnostic results in case of errors
4646
NetworkDiagLogDir string
47+
// Image to use for network diagnostic pod
48+
NetworkDiagPodImage string
4749
// We need a factory for creating clients. Creating a factory
4850
// creates flags as a byproduct, most of which we don't want.
4951
// The command creates these and binds only the flags we want.
@@ -133,6 +135,7 @@ func NewCmdDiagnostics(name string, fullName string, out io.Writer) *cobra.Comma
133135
cmd.Flags().BoolVar(&o.ImageTemplate.Latest, options.FlagLatestImageName, false, "If true, when expanding the image template, use latest version, not release version")
134136
cmd.Flags().BoolVar(&o.PreventModification, options.FlagPreventModificationName, false, "If true, may be set to prevent diagnostics making any changes via the API")
135137
cmd.Flags().StringVar(&o.NetworkDiagLogDir, options.FlagNetworkDiagLogDir, netutil.NetworkDiagDefaultLogDir, "Path to store network diagnostic results in case of errors")
138+
cmd.Flags().StringVar(&o.NetworkDiagPodImage, options.FlagNetworkDiagPodImage, netutil.NetworkDiagDefaultPodImage, "Image to use for network diagnostic pod")
136139
flagtypes.GLog(cmd.Flags())
137140
options.BindLoggerOptionFlags(cmd.Flags(), o.LogOptions, options.RecommendedLoggerOptionFlags())
138141

pkg/cmd/admin/diagnostics/options/flaginfo.go

+1
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,5 @@ const (
5454
FlagLatestImageName = "latest-images"
5555
FlagPreventModificationName = "prevent-modification"
5656
FlagNetworkDiagLogDir = "network-logdir"
57+
FlagNetworkDiagPodImage = "network-pod-image"
5758
)

pkg/diagnostics/network/objects.go

+42-5
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,20 @@ import (
1313
)
1414

1515
const (
16-
diagnosticsImage = "openshift/diagnostics-deployer"
1716
networkDiagTestPodSelector = "network-diag-pod-name"
1817

1918
testPodImage = "docker.io/openshift/hello-openshift"
2019
testPodPort = 9876
2120
testTargetPort = 8080
2221
)
2322

24-
func GetNetworkDiagnosticsPod(command, podName, nodeName string) *kapi.Pod {
23+
func GetNetworkDiagnosticsPod(diagnosticsImage, command, podName, nodeName string) *kapi.Pod {
2524
privileged := true
2625
hostRootVolName := "host-root-dir"
2726
secretVolName := "kconfig-secret"
2827
secretDirBaseName := "secrets"
2928
gracePeriod := int64(0)
3029

31-
cmd := fmt.Sprintf("openshift-network-debug %s %s", util.NetworkDiagContainerMountPath, command)
32-
3330
pod := &kapi.Pod{
3431
ObjectMeta: kapi.ObjectMeta{Name: podName},
3532
Spec: kapi.PodSpec{
@@ -66,7 +63,8 @@ func GetNetworkDiagnosticsPod(command, podName, nodeName string) *kapi.Pod {
6663
ReadOnly: true,
6764
},
6865
},
69-
Command: []string{"sh", "-c", cmd},
66+
Command: []string{"/bin/bash", "-c"},
67+
Args: []string{getNetworkDebugScript(util.NetworkDiagContainerMountPath, command)},
7068
},
7169
},
7270
Volumes: []kapi.Volume{
@@ -135,3 +133,42 @@ func GetTestService(serviceName, podName, nodeName string) *kapi.Service {
135133
},
136134
}
137135
}
136+
137+
func getNetworkDebugScript(nodeRootFS, command string) string {
138+
return fmt.Sprintf(`
139+
#!/bin/bash
140+
#
141+
# Based on containerized/non-containerized openshift install,
142+
# this script sets the environment so that docker, openshift, iptables, etc.
143+
# binaries are availble for network diagnostics.
144+
#
145+
set -o nounset
146+
set -o pipefail
147+
148+
node_rootfs=%s
149+
cmd="%s"
150+
151+
# Origin image: openshift/node, OSE image: openshift3/node
152+
node_image_regex="^openshift.*/node"
153+
154+
node_container_id="$(chroot "${node_rootfs}" docker ps --format='{{.Image}} {{.ID}}' | grep "${node_image_regex}" | cut -d' ' -f2)"
155+
156+
if [[ -z "${node_container_id}" ]]; then # non-containerized openshift env
157+
158+
chroot "${node_rootfs}" ${cmd}
159+
160+
else # containerized env
161+
162+
# On containerized install, docker on the host is used by node container,
163+
# For the privileged network diagnostics pod to use all the binaries on the node:
164+
# - Copy kubeconfig secret to node mount namespace
165+
# - Run openshift under the mount namespace of node
166+
167+
node_docker_pid="$(chroot "${node_rootfs}" docker inspect --format='{{.State.Pid}}' "${node_container_id}")"
168+
kubeconfig="/etc/origin/node/kubeconfig"
169+
cp "${node_rootfs}/secrets/kubeconfig" "${node_rootfs}/${kubeconfig}"
170+
171+
chroot "${node_rootfs}" nsenter -m -t "${node_docker_pid}" -- /bin/bash -c 'KUBECONFIG='"${kubeconfig} ${cmd}"''
172+
173+
fi`, nodeRootFS, command)
174+
}

pkg/diagnostics/network/run_pod.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ type NetworkDiagnostic struct {
3131
Factory *osclientcmd.Factory
3232
PreventModification bool
3333
LogDir string
34+
PodImage string
3435

3536
pluginName string
3637
nodes []kapi.Node
@@ -94,6 +95,9 @@ func (d *NetworkDiagnostic) Check() types.DiagnosticResult {
9495
if len(d.LogDir) == 0 {
9596
d.LogDir = util.NetworkDiagDefaultLogDir
9697
}
98+
if len(d.PodImage) == 0 {
99+
d.PodImage = util.NetworkDiagDefaultPodImage
100+
}
97101
d.runNetworkDiagnostic()
98102
return d.res
99103
}
@@ -172,7 +176,7 @@ func (d *NetworkDiagnostic) runNetworkPod(command string) error {
172176
for _, node := range d.nodes {
173177
podName := kapi.SimpleNameGenerator.GenerateName(fmt.Sprintf("%s-", util.NetworkDiagPodNamePrefix))
174178

175-
pod := GetNetworkDiagnosticsPod(command, podName, node.Name)
179+
pod := GetNetworkDiagnosticsPod(d.PodImage, command, podName, node.Name)
176180
_, err := d.KubeClient.Core().Pods(d.nsName1).Create(pod)
177181
if err != nil {
178182
return fmt.Errorf("Creating network diagnostic pod %q on node %q with command %q failed: %v", podName, node.Name, command, err)

pkg/diagnostics/networkpod/util/util.go

+5
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212

1313
osclient "github.com/openshift/origin/pkg/client"
1414
osclientcmd "github.com/openshift/origin/pkg/cmd/util/clientcmd"
15+
"github.com/openshift/origin/pkg/cmd/util/variable"
1516
"github.com/openshift/origin/pkg/sdn/api"
1617
sdnapi "github.com/openshift/origin/pkg/sdn/api"
1718
"github.com/openshift/origin/pkg/util/netutils"
@@ -33,6 +34,10 @@ const (
3334
NetworkDiagPodLogDirPrefix = "/pods"
3435
)
3536

37+
var (
38+
NetworkDiagDefaultPodImage = variable.DefaultImagePrefix
39+
)
40+
3641
func GetOpenShiftNetworkPlugin(osClient *osclient.Client) (string, bool, error) {
3742
cn, err := osClient.ClusterNetwork().Get(api.ClusterNetworkDefault)
3843
if err != nil {

0 commit comments

Comments
 (0)