Iptables添加DNAT规则以将IP:端口上的请求转发到容器端口

时间:2017-05-10 12:04:32

标签: kubernetes iptables

我有一个kubernetes集群,它有2个接口: eth0:10.10.10.100(内部) eth1:20.20.20.100(外部)

群集中有很少的pod正在运行法兰绒网络。 POD1:172.16.54.4(nginx服务)

我想从连接到上述k8s群集的其他主机访问20.20.20.100:80,以便我可以访问nginx POD。

我启用了ip转发功能,并添加了DNAT规则,如下所示:

iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.54.4:80

在此之后,当我尝试在20.20.20.100进行卷曲时,我得到了

Failed to connect to 10.10.65.161 port 80: Connection refused

我该如何运作?

2 个答案:

答案 0 :(得分:0)

为什么不使用clang::CallExpr* expr; ... auto decl = expr->getCalleeDecl(); if (decl != nullptr) { if (decl->getKind() == clang::Decl::Var) { clang::VarDecl *varDecl = clang::dyn_cast<clang::VarDecl>(decl); if(varDecl->getType()->isFunctionPointerType() == true) { const clang::PointerType *pt = varDecl->getType()->getAs<clang::PointerType>(); const clang::FunctionProtoType *ft = pt->getPointeeType()->getAs<clang::FunctionProtoType>(); if (ft != nullptr) { std::string retTypeName = ft->getReturnType().getAsString(); ... auto paramsCount = funcType->getNumParams(); for (size_t i = 0; i < paramsCount; ++i) { clang::QualType paramType = funcType->getParamType(i); std::string paramTypeName = paramType.getAsString(); ... } } } } } 类型?我认为这是通过hostIP访问服务的更好方式。请尝试nodeport并向我显示详细信息。

答案 1 :(得分:0)

你可以尝试

iptables -t nat -A PREROUTING -p tcp -d 20.20.20.100 --dport 80 -j DNAT --to-destination 172.16.54.4:80

但我不建议您自己管理iptables,维护规则很痛苦......

您可以使用k8中的hostPort。您可以使用kubenet作为网络插件,因为cni插件不支持hostPort