【问题标题】:Connect to internal kubernetes service from local network从本地网络连接到内部 Kubernetes 服务
【发布时间】:2020-11-20 23:08:26
【问题描述】:

可以从本地网络连接到内部 kubernetes 服务吗?例如,我在 kubernetes 集群之外有 vm,但在与 kubernetes 集群相同的网络上(我可以从我的 vm ping 专用节点 ip),并且我想从该 vm 连接到内部 kubernetes 服务,如来自本地网络的http://sample-service.default.svc.cluster.local

我已尝试按照本教程进行操作 https://blog.heptio.com/configuring-your-linux-host-to-resolve-a-local-kubernetes-clusters-service-urls-a8c7bdb212a7 但仍然无法正常工作

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    是的,可以,您需要将服务类型更改为NodePorthttps://kubernetes.io/docs/concepts/services-networking/service/#nodeport。 然后,您的服务将可以从您的任何 Kubernetes 工作节点访问,使用其 IP 地址和以下命令显示的 NodePort (>30000)。

    例如:

    $ kubectl get svc parse-server 
    NAME           TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    parse-server   NodePort   10.96.139.142   <none>        1337:31013/TCP   17h
    
    $ kubectl get nodes -o wide
    NAME                 STATUS   ROLES    AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                                     KERNEL-VERSION    CONTAINER-RUNTIME
    ...
    kind-worker2         Ready    <none>   42h   v1.19.1   172.18.0.2    <none>        Ubuntu Groovy Gorilla (development branch)   4.15.0-1101-oem   containerd://1.4.0
    

    然后服务parse-server可以从本地网络使用:

    $ curl http://172.18.0.2:31013
    <!DOCTYPE html>
    <html lang="en">
    ...
    

    NodePort 是在 Kubernetes 集群之外公开服务的最简单方法,但如果您需要更高级的功能,例如通过 url 路径或主机名路由,则需要调查 ingress:https://kubernetes.io/docs/concepts/services-networking/ingress/

    【讨论】:

    • 我正在考虑在集群外设置代理服务器,例如:如果我有 2 个节点,我应该使用哪个节点 ip?
    • 您的代理,我们称之为负载均衡器,应该在两个 ips 上重定向,例如使用循环算法。
    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多