我在 kubernetes API 前面添加了一个代理,以便使用自制的身份验证系统对用户进行身份验证(以及其他操作)。
我修改了 kube 配置,让 kubectl 访问代理。代理有自己的 kubeconfig 和有效的证书颁发机构数据,因此我不需要任何凭据。
到目前为止,一切正常,这是我本地需要的最低配置:
clusters:
- cluster:
server: http://localhost:8080
name: proxy
contexts:
- context:
cluster: proxy
name: proxy
current-context: proxy
Run Code Online (Sandbox Code Playgroud)
现在身份验证应该基于令牌,我希望能够将其作为 kubectl 请求标头的一部分进行传递。
我尝试了多种配置,在 kubeconfig 中添加带有令牌的用户,例如
clusters:
- cluster:
server: http://localhost:8080
name: proxy
contexts:
- context:
cluster: proxy
user: robin
name: proxy
current-context: proxy
users:
- name: robin
user:
token: my-token
Run Code Online (Sandbox Code Playgroud)
或者指定一个身份验证提供者,例如
clusters:
- cluster:
server: http://localhost:8080
name: proxy
contexts:
- context:
cluster: proxy
user: robin
name: proxy
current-context: proxy
users:
- …Run Code Online (Sandbox Code Playgroud) kubectl exec -it pod_XXXX -- top我从主节点运行命令。然后通过另一个终端的命令杀死该kubectl exec进程。sudo kill -9 <pid_of_kubectl>
kubectl exec -it pod_XXXX -- top
sudo kill -9 <pid_of_kubectl_exec_command>
Run Code Online (Sandbox Code Playgroud)
在 POD 内部,top命令继续运行。当我按crtl+c终止kubectl exec. 这是预期的行为吗?
我像这样标记了一个 Kubernetes 命名空间:
kubectl label namespace kube-system name=kube-system
Run Code Online (Sandbox Code Playgroud)
我如何摆脱这个标签?
有没有办法从kubectx中删除 kubernetes 集群上下文?或者只能通过手动从 kubeconfig 中删除它们来完成?
Net Core 应用程序映像,我正在尝试在本地 kubernetes 中创建部署。我创建了 docker 镜像,如下所示。
docker tag microservicestest:dev microservicestest .
docker build -t microservicestest .
docker run -d -p 8080:80 --name myapp microservicetest
Run Code Online (Sandbox Code Playgroud)
然后我创建了部署,如下所示。
kubectl run microservicestest-deployment --image=microservicestest:latest --port 80 --replicas=3
kubectl expose deployment microservicestest-deployment --type=NodePort
Run Code Online (Sandbox Code Playgroud)
然后当我看到 Kubectl get pods 时,我看到以下错误
以下是我运行 docker images 时的输出
下面是输出
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: "2020-09-22T04:29:14Z"
generation: 1
labels:
run: microservicestest-deployment
name: microservicestest-deployment
namespace: default
resourceVersion: "17282"
selfLink: /apis/apps/v1/namespaces/default/deployments/microservicestest-deployment
uid: bf75410a-d332-4016-9757-50d534114599
spec:
progressDeadlineSeconds: 600
replicas: 3
revisionHistoryLimit: 10 …Run Code Online (Sandbox Code Playgroud) 我使用以下命令打印所有 Pod:
$ kubectl get pods --all-namespaces
Run Code Online (Sandbox Code Playgroud)
输出是:
NAMESPACE NAME READY STATUS RESTARTS AGE
calico-system calico-kube-controllers-7487d7f956-hx4fp 1/1 Running 0 88m
calico-system calico-node-vn52p 1/1 Running 0 88m
calico-system calico-typha-7588984c44-m6tsz 1/1 Running 0 88m
gitlab-managed-apps install-ingress 0/1 Error 0 14m********
gitlab-managed-apps install-prometheus 0/1 Error 0 12m
kube-system coredns-f9fd979d6-2n2pg 1/1 Running 0 91m
kube-system coredns-f9fd979d6-sq9bl 1/1 Running 0 91m
kube-system etcd-tuoputuo-iamnotstone-server 1/1 Running 0 91m
kube-system kube-apiserver-tuoputuo-iamnotstone-server 1/1 Running 0 91m
kube-system kube-controller-manager-tuoputuo-iamnotstone-server 1/1 Running 0 91m
kube-system kube-proxy-87jkr 1/1 Running 0 91m …Run Code Online (Sandbox Code Playgroud) 我想为 PHP 脚本运行 Kubernetes CronJob。作业正常执行,但 POD 的状态仍保持运行状态,几分钟后变为错误。它应该是已完成状态。尝试了不同的选项,但无法解决问题。
这是我的 CronJob Yaml 文件
这是容器内的日志输出。
忽略 PHP 异常。无论例外情况如何,问题都存在。
我尝试执行此命令:
alias kubectl_winpty='winpty kubectl' ( using winpty due to [bug][1]
kubectl_winpty exec -it vault-0 -n vault-xxx -- sh export VAULT_CACERT=/vault/userconfig/vault-tls/vault.ca
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
sh: can't open 'export': No such file or directory
command terminated with exit code 2
Run Code Online (Sandbox Code Playgroud)
pod 确实存在并正在运行
$ kubectl get pods vault-0 -n vault-xxx
NAME READY STATUS RESTARTS AGE
vault-0 0/1 Running 0 17m
Run Code Online (Sandbox Code Playgroud) 能够使用 CLI 在 Kubernetes 集群中创建作业 ( https://kubernetesbyexample.com/jobs/ )
有没有办法使用 Java API 在集群内创建作业?
我目前正在尝试在我的 kubernetes pod 上执行一个简单的 bash 命令,但似乎遇到了一些没有意义的错误。
如果我执行到 docker 容器并运行命令普通
I have no name!@kafka-0:/tmp$ if [ $(comm -13 <(sort selectedTopics) <(sort topics.sh) | wc -l) -gt 0 ]; then echo "hello"; fi
Run Code Online (Sandbox Code Playgroud)
我得到 Hello 作为输出。
但是如果从外部执行相同的
kubectl exec --namespace default kafka-0 -c kafka -- bash -c "if [ $(comm -13 </tmp/selectedTopics </tmp/topics.sh| wc -l) -gt 0 ]; then echo topic does not exist && exit 1; fi"
Run Code Online (Sandbox Code Playgroud)
然后我收到一条错误消息,指出 /tmp/topics.sh: No such file or directory
事件虽然我能够做到这一点
kubectl exec --namespace $namespace kafka-0 -c …Run Code Online (Sandbox Code Playgroud) kubectl ×10
kubernetes ×10
docker ×2
azure-aks ×1
bash ×1
containers ×1
kubeconfig ×1
proxy ×1
sh ×1