gpt4 book ai didi

kubernetes - 是否可以通过 https ingress 访问 Kubernetes API?

转载 作者:行者123 更新时间:2023-12-02 11:44:20 25 4
gpt4 key购买 nike

我试图通过 HTTPS 入口访问 Kubernetes API 失败,现在开始怀疑这是否可能?

任何直接远程访问的详细指南(不使用 ssh -> kubectl 代理以避免在 Kubernetes 节点上进行用户管理)将不胜感激。 :)

更新:

只是为了更清楚。这是内部部署的裸机(无 GCE、AWZ、Azure 或任何其他),并且某些环境将完全脱机(这将增加获取安装包的额外​​问题)。

目的是能够在客户端主机上使用 kubectl 并通过 Keycloak 进行身份验证(如果遵循分步说明,也会失败)。使用 SSH 和 kubectl 进行管理访问不适合客户端访问。所以看起来我将不得不更新防火墙以公开 API 端口并创建 NodePort 服务。

设置:

[kubernetes - env] - [FW/SNAT] - [me]



FW/NAT 只允许 22,80 和 443 端口访问

因此,当我在 Kubernetes 上设置入口时,我无法创建将 443 重定向到 6443 的防火墙规则。似乎唯一的选择是创建一个 https 入口以将“api-kubernetes.node.lan”的访问指向 kubernetes 服务端口 6443。 Ingress 本身工作正常,我为 Keycloak 身份验证应用程序创建了一个工作入口。

我已将 .kube/config 从主节点复制到我的机器并将其放入 .kube/config (Cygwin 环境)

尝试了什么:
  • SSL 直通。无法启用,因为 kubernetes-ingress Controller 由于无法创建中间证书而无法启动。即使启动,也很可能会削弱其他 HTTPS 入口。
  • 创建自签名 SSL 证书。结果是通过浏览器,当我指向 https://api-kubernetes.node.lan/api 时,我可以获得一个 API 输出。 .但是,kubectl 会因为未签名的证书而抛出错误,这是显而易见的。
  • 将 apiserver.crt 放入 ingress tls: 定义。由于证书不适合 api-kubernetes.node.lan 出现错误。也很明显。
  • 按照指南 [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

  • 在尝试比较 apiserver.pem 和我生成的证书时,我看到了唯一的区别:
    apiserver.pem
    X509v3 Key Usage:
    Digital Signature, Non Repudiation, Key Encipherment
    generated.crt
    X509v3 Extended Key Usage:
    TLS Web Server Authentication

    入口配置:
    ---
    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

    链接:
    [1] https://db-blog.web.cern.ch/blog/lukas-gedvilas/2018-02-creating-tls-certificates-using-kubernetes-api

    最佳答案

    只要暴露kube-apiserver应该就可以了中的 pods kube-system命名空间。我是这样试的:

    $ 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
    ...

    然后去一台集群机器上点我的 ~/.kube/config上下文IP 10.x.x.x:6443
    clusters:
    - cluster:
    certificate-authority-data: [REDACTED]
    server: https://10.x.x.x:6443
    name: kubernetes
    ...

    然后:
    $ 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"}

    我用过 --insecure-skip-tls-verify因为 10.x.x.x需要在服务器证书上有效。你实际上可以像这样修复它: Configure AWS publicIP for a Master in Kubernetes

    因此,在您的情况下,可能有几件事:
  • 由于您最初在 Ingress 上提供 SSL,因此您需要在 /etc/kubernetes/pki/ 下使用相同的 kubeapi-server 证书。在你的主人身上
  • 您需要将外部 IP 或名称添加到暴露 Ingress 的证书中。按照这样的操作:Configure AWS publicIP for a Master in Kubernetes
  • 关于kubernetes - 是否可以通过 https ingress 访问 Kubernetes API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52895437/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com