Elv*_*nas 5 kubernetes kubectl kubernetes-ingress
我尝试通过 HTTPS 入口访问 Kubernetes API 失败,现在开始怀疑这是否可行?
任何直接远程访问的工作详细指南(不使用 ssh -> kubectl 代理以避免 Kubernetes 节点上的用户管理)将不胜感激。:)
更新:
只是为了说得更清楚。这是裸机本地部署(无 GCE、AWZ、Azure 或任何其他),并且某些环境将完全离线(这将增加获取安装包的其他问题)。
目的是能够在客户端主机上使用 kubectl,并通过 Keycloak 进行身份验证(如果遵循分步说明,也会失败)。使用 SSH 和 kubectl 进行管理访问不适合客户端访问。所以看来我必须更新防火墙以公开 API 端口并创建 NodePort 服务。
设置:
[kubernetes - env] - [FW/SNAT] - [我]
FW/NAT仅允许22,80和443端口访问
因此,当我在 Kubernetes 上设置入口时,我无法创建防火墙规则将 443 重定向到 6443。似乎唯一的选择是创建 https 入口将对“api-kubernetes.node.lan”的访问指向 kubernetes 服务端口 6443。 Ingress 本身工作正常,我已经为 Keycloak 身份验证应用程序创建了一个工作入口。
我已将 .kube/config 从主节点复制到我的机器并将其放入 .kube/config (Cygwin 环境)
尝试了什么:
按照指南 [1] 创建 kube-ca 签名证书。现在浏览器根本不显示任何内容。使用curl 访问https://api-kubernetes.node.lan/api会导致空输出(使用-v 时我可以看到HTTP OK)。Kubectl 现在收到以下错误:
$ kubectl.exe version
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.0", GitCommit:"91e7b4fd31fcd3d5f436da26c980becec37ceefe", GitTreeState:"clean", BuildDate:"2018-06-27T20:17:28Z", GoVersion:"go1.10.2", Compiler:"gc", Platform:"windows/amd64"}
Error from server: the server responded with the status code 0 but did not return more information
Run Code Online (Sandbox Code Playgroud)当尝试比较 apiserver.pem 和我生成的证书时,我发现唯一的区别:
apiserver.pem
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment
generated.crt
X509v3 Extended Key Usage:
TLS Web Server Authentication
Run Code Online (Sandbox Code Playgroud)
入口配置:
---
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: kubernetes-api
namespace: default
labels:
app: kubernetes
annotations:
kubernetes.io/ingress.class: nginx
spec:
tls:
- secretName: kubernetes-api-cert
hosts:
- api-kubernetes.node.lan
rules:
- host: api-kubernetes.node.lan
http:
paths:
- path: "/"
backend:
serviceName: kubernetes
servicePort: 6443
Run Code Online (Sandbox Code Playgroud)
只要kube-apiserver在kube-system命名空间中公开 pod,您就应该能够做到这一点。我尝试过这样的:
$ kubectl -n kube-system expose pod kube-apiserver-xxxx --name=apiserver --port 6443
service/apiserver exposed
$ kubectl -n kube-system get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
apiserver ClusterIP 10.x.x.x <none> 6443/TCP 1m
...
Run Code Online (Sandbox Code Playgroud)
然后去一个集群机器,指向我的~/.kube/config上下文IP10.x.x.x:6443
clusters:
- cluster:
certificate-authority-data: [REDACTED]
server: https://10.x.x.x:6443
name: kubernetes
...
Run Code Online (Sandbox Code Playgroud)
然后:
$ kubectl version --insecure-skip-tls-verify
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.2", GitCommit:"bb9ffb1654d4a729bb4cec18ff088eacc153c239", GitTreeState:"clean", BuildDate:"2018-08-07T23:17:28Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.2", GitCommit:"bb9ffb1654d4a729bb4cec18ff088eacc153c239", GitTreeState:"clean", BuildDate:"2018-08-07T23:08:19Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
Run Code Online (Sandbox Code Playgroud)
我使用是--insecure-skip-tls-verify因为10.x.x.x需要在服务器证书上有效。您实际上可以这样修复它:Configure AWS publicIP for a Master in Kubernetes
因此,您的情况可能有以下几点:
/etc/kubernetes/pki/master 上使用相同的 kubeapi-server 证书| 归档时间: |
|
| 查看次数: |
6368 次 |
| 最近记录: |