【问题标题】:Exposing Kubernetes container IP outside its namespace将 Kubernetes 容器 IP 暴露在其命名空间之外
【发布时间】:2021-11-11 09:45:18
【问题描述】:

我有一个 Kubernetes 集群,它有两个命名空间,dbns(数据库所在的位置)和 jobland(作业运行的位置)。

我想从jobland 命名空间中运行的容器运行Job,该容器将连接到dbns 命名空间中的数据库并针对该数据库运行脚本。

当我运行get pod,statefulset,svc,configmap -o wide 时,我看到我的数据库的IP 为10.1.0.34,但我假设这只能从dbns 命名空间内运行的其他容器“访问”,对吗?如果是这样,我如何公开它的 IP,以便 dbns 命名空间之外的项目可以连接到它(例如在 jobland 中运行的东西)?

【问题讨论】:

  • 除非有 NetworkPolicy-Resources 阻止它,否则默认情况下应该可以使用。 Kuberentes 默认情况下不是安全的,因此容器之间的通信不受命名空间限制。含义:您应该能够通过其 IP 从所有命名空间简单地访问该 pod。

标签: kubernetes


【解决方案1】:

如果您使用 K8S 服务公开您的对象(pod、部署等),您可以使用 IP 或 FQDN 将它们公开在命名空间之外

下面是一个例子:
https://github.com/nirgeier/KubernetesLabs/tree/master/Labs/05-Services#0403-using-the-full-DNS-name


  • 作为最佳实践,您不应依赖集群 IP,因为它可能会改变并“破坏”您的连接。

  • 推荐的方法是如上所述使用 FDDN,一旦您将Service 对象添加到您的命名空间和资源,它就会自动为您创建。

无论您的代码部署到哪个 IP 和集群,名称 (FQDN) 都是相同的。

您可以验证此名称,例如:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2018-06-10
    相关资源
    最近更新 更多