如果我想从外部世界访问,我应该在随机kubernetes节点端口上添加iptables规则吗?

时间:2016-05-15 11:36:12

标签: kubernetes iptables

我在kubernetes集群上部署了一个应用程序。 kubernetes节点端口为30010,将重定向到41018。 [root@kubernetes-slave ~]# iptables -L -n -t nat Chain KUBE-NODEPORT-HOST (1 references) target prot opt source destination DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 /* default/myservice:http */ tcp dpt:30010 to:<server_ip>:41018

如果禁用防火墙,每件事情都可以。但是,如果我使用service firewalld start启用它。我无法访问http://<server_ip>:30010。 即使我执行firewall-cmd --zone=public --add-port=30010/tcp,它仍然是&#34; Bad GateWay&#34;

经过两天的调试,我终于发现我应该打开41018端口而不是30010端口,然后一切正常。

但问题是30010端口可由用户配置,但每次部署时kubernetes随机选择端口41018。

我认为打开41018端口不是一个好选择。有什么建议吗?或者我使用kubernetes有问题吗?

1 个答案:

答案 0 :(得分:0)

您可以在服务定义中设置一个静态nodePort,在每次部署时都不会更改。

例如:

{
    "kind": "Service",
    "apiVersion": "v1",
    "metadata": {
        "name": "my-service"
    },
    "spec": {
        "selector": {
            "app": "MyApp"
        },
        "ports": [
            {
                "protocol": "TCP",
                "port": 80,
                "targetPort": 9376,
                "nodePort": 30061
            }
        ],
        "type": "nodePort"
    }
}

应始终为您的服务创建300P的nodePort。