mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Merge pull request #44862 from liggitt/icc-namespace-override
Automatic merge from submit-queue Stop treating in-cluster-config namespace as an override Fixes #44835 The namespace of an in-cluster config should behave like the namespace specified in a kubeconfig file... it should be used as the default namespace, but be able to be overridden by namespaces specified in yaml files passed to `kubectl create -f`. ```release-note Restored the ability of kubectl running inside a pod to consume resource files specifying a different namespace than the one the pod is running in. ```
This commit is contained in:
		@@ -482,13 +482,13 @@ func (config *inClusterClientConfig) Namespace() (string, bool, error) {
 | 
				
			|||||||
	// This way assumes you've set the POD_NAMESPACE environment variable using the downward API.
 | 
						// This way assumes you've set the POD_NAMESPACE environment variable using the downward API.
 | 
				
			||||||
	// This check has to be done first for backwards compatibility with the way InClusterConfig was originally set up
 | 
						// This check has to be done first for backwards compatibility with the way InClusterConfig was originally set up
 | 
				
			||||||
	if ns := os.Getenv("POD_NAMESPACE"); ns != "" {
 | 
						if ns := os.Getenv("POD_NAMESPACE"); ns != "" {
 | 
				
			||||||
		return ns, true, nil
 | 
							return ns, false, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Fall back to the namespace associated with the service account token, if available
 | 
						// Fall back to the namespace associated with the service account token, if available
 | 
				
			||||||
	if data, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/namespace"); err == nil {
 | 
						if data, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/namespace"); err == nil {
 | 
				
			||||||
		if ns := strings.TrimSpace(string(data)); len(ns) > 0 {
 | 
							if ns := strings.TrimSpace(string(data)); len(ns) > 0 {
 | 
				
			||||||
			return ns, true, nil
 | 
								return ns, false, nil
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -636,7 +636,24 @@ users:
 | 
				
			|||||||
    tokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
 | 
					    tokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
 | 
				
			||||||
`), os.FileMode(0755)))
 | 
					`), os.FileMode(0755)))
 | 
				
			||||||
			framework.Logf("copying override kubeconfig to the %s pod", simplePodName)
 | 
								framework.Logf("copying override kubeconfig to the %s pod", simplePodName)
 | 
				
			||||||
			framework.RunKubectlOrDie("cp", filepath.Join(tmpDir, overrideKubeconfigName), ns+"/"+simplePodName+":/tmp/"+overrideKubeconfigName)
 | 
								framework.RunKubectlOrDie("cp", filepath.Join(tmpDir, overrideKubeconfigName), ns+"/"+simplePodName+":/tmp/")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								framework.ExpectNoError(ioutil.WriteFile(filepath.Join(tmpDir, "invalid-configmap-with-namespace.yaml"), []byte(`
 | 
				
			||||||
 | 
					kind: ConfigMap
 | 
				
			||||||
 | 
					apiVersion: v1
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: "configmap with namespace and invalid name"
 | 
				
			||||||
 | 
					  namespace: configmap-namespace
 | 
				
			||||||
 | 
					`), os.FileMode(0755)))
 | 
				
			||||||
 | 
								framework.ExpectNoError(ioutil.WriteFile(filepath.Join(tmpDir, "invalid-configmap-without-namespace.yaml"), []byte(`
 | 
				
			||||||
 | 
					kind: ConfigMap
 | 
				
			||||||
 | 
					apiVersion: v1
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: "configmap without namespace and invalid name"
 | 
				
			||||||
 | 
					`), os.FileMode(0755)))
 | 
				
			||||||
 | 
								framework.Logf("copying configmap manifests to the %s pod", simplePodName)
 | 
				
			||||||
 | 
								framework.RunKubectlOrDie("cp", filepath.Join(tmpDir, "invalid-configmap-with-namespace.yaml"), ns+"/"+simplePodName+":/tmp/")
 | 
				
			||||||
 | 
								framework.RunKubectlOrDie("cp", filepath.Join(tmpDir, "invalid-configmap-without-namespace.yaml"), ns+"/"+simplePodName+":/tmp/")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			By("getting pods with in-cluster configs")
 | 
								By("getting pods with in-cluster configs")
 | 
				
			||||||
			execOutput := framework.RunHostCmdOrDie(ns, simplePodName, "/tmp/kubectl get pods --v=7 2>&1")
 | 
								execOutput := framework.RunHostCmdOrDie(ns, simplePodName, "/tmp/kubectl get pods --v=7 2>&1")
 | 
				
			||||||
@@ -644,6 +661,18 @@ users:
 | 
				
			|||||||
			Expect(execOutput).To(ContainSubstring("Using in-cluster namespace"))
 | 
								Expect(execOutput).To(ContainSubstring("Using in-cluster namespace"))
 | 
				
			||||||
			Expect(execOutput).To(ContainSubstring("Using in-cluster configuration"))
 | 
								Expect(execOutput).To(ContainSubstring("Using in-cluster configuration"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								By("creating an object containing a namespace with in-cluster config")
 | 
				
			||||||
 | 
								_, err = framework.RunHostCmd(ns, simplePodName, "/tmp/kubectl create -f /tmp/invalid-configmap-with-namespace.yaml --v=7 2>&1")
 | 
				
			||||||
 | 
								Expect(err).To(ContainSubstring("Using in-cluster namespace"))
 | 
				
			||||||
 | 
								Expect(err).To(ContainSubstring("Using in-cluster configuration"))
 | 
				
			||||||
 | 
								Expect(err).To(ContainSubstring(fmt.Sprintf("POST https://%s:%s/api/v1/namespaces/configmap-namespace/configmaps", inClusterHost, inClusterPort)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								By("creating an object not containing a namespace with in-cluster config")
 | 
				
			||||||
 | 
								_, err = framework.RunHostCmd(ns, simplePodName, "/tmp/kubectl create -f /tmp/invalid-configmap-without-namespace.yaml --v=7 2>&1")
 | 
				
			||||||
 | 
								Expect(err).To(ContainSubstring("Using in-cluster namespace"))
 | 
				
			||||||
 | 
								Expect(err).To(ContainSubstring("Using in-cluster configuration"))
 | 
				
			||||||
 | 
								Expect(err).To(ContainSubstring(fmt.Sprintf("POST https://%s:%s/api/v1/namespaces/%s/configmaps", inClusterHost, inClusterPort, f.Namespace.Name)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			By("trying to use kubectl with invalid token")
 | 
								By("trying to use kubectl with invalid token")
 | 
				
			||||||
			_, err = framework.RunHostCmd(ns, simplePodName, "/tmp/kubectl get pods --token=invalid --v=7 2>&1")
 | 
								_, err = framework.RunHostCmd(ns, simplePodName, "/tmp/kubectl get pods --token=invalid --v=7 2>&1")
 | 
				
			||||||
			framework.Logf("got err %v", err)
 | 
								framework.Logf("got err %v", err)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user