我们有一个微服务应用程序,它使用付费软件来做一些特定的操作。本软件使用在线许可验证才能正常运行。
由于客户 Kubernetes 集群在 VPC 中,无法访问互联网,如果不将其转发到可以访问许可证服务器域的代理机器,则无法进行此在线许可证验证。
许可证服务器位于特定域,因此此流量必须路由从微服务的容器到一个代理机器。
只有这台代理机器可以访问互联网并且应该将此流量转发到软件供应商的许可证服务器。
在 VM 世界中,可以这样做:
sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport port -j DNAT --to-destination ip:port
iptables -t nat -A POSTROUTING -j MASQUERADE
但是在 Kubernetes 集群中推荐的方法是什么。
如果外部供应商的 url 没有硬编码,您可以在 kubernetes 中使用
ExternalName
服务。
因此您可以将 CNAME 分配给外部 ip 地址,并在您的应用程序中使用 CNAME 作为外部供应商的 url:
kind: Service
apiVersion: v1
metadata:
name: myvendor
spec:
type: ExternalName
externalName: x.x.x.x <-- IP Address
然后在您的应用程序中使用
myvendor
作为 url。
它将由内部 kubernetes dns 服务器处理。