Suv*_*ica 0 centos iptables google-cloud-platform kubernetes
我在Digital Ocean上的群集上使用了kubernates.
我在Pod中的容器内部有应用程序.我需要与此应用程序建立外部连接.我需要访问具体实例(因为我有超过10个Pod与此应用程序).
所以,我的问题是:我如何进行外部访问这个应用程序.
例如,我有公共IP 192.168.9.9
并有2个pod实例.首先监听端口8990,它的Pod IP是10.0.0.1,第二个监听端口8991,它的Pod IP是10.0.0.1.
因此,我需要将流量从192.168.9.9:8990重定向到10.0.0.1:8990和192.168.9.9:8991到10.0.0.1:8991.
是的,我可以通过手动使用iptables来实现.但我想自动完成.当新的Pod启动时,我想在iptables中创建记录.
我可以使用api来监视服务:
127.0.0.1:8080/api/v1beta1/watch/services
Run Code Online (Sandbox Code Playgroud)
并且可以在这里获取pod的ip:
127.0.0.1:8080/api/v1beta1/pods
Run Code Online (Sandbox Code Playgroud)
我找到了解决方案,在这里做了类似于我的需求.但看起来糟糕的建筑决策.在新的Pod启动后,是否有更好的方法将外部流量重定向到pod?
如果您的公共IP是在您的一个小兵的接口上配置的,那么您需要做的就是publicIPs
在服务描述中设置值.例如,如果您定义这样的服务:
kind: Service
apiVersion: v1beta1
id: test-web
port: 8888
selector:
name: test-web
containerPort: 80
publicIPs:
- 192.168.1.43
Run Code Online (Sandbox Code Playgroud)
然后Kubernetes会创建像这样的iptables规则:
-A KUBE-PORTALS-CONTAINER -d 192.168.1.43/32 -p tcp -m comment --comment test-web -m tcp --dport 8888 -j REDIRECT --to-ports 38541
-A KUBE-PORTALS-HOST -d 192.168.1.43/32 -p tcp -m comment --comment test-web -m tcp --dport 8888 -j DNAT --to-destination 192.168.1.20:38541
Run Code Online (Sandbox Code Playgroud)
这些规则将流量重定向到您的publicIP
端口,并将端口重定向到本地kube-proxy
实例维护的相应端口.我只写了kiwi(我很抱歉你不喜欢它!)来提供动态分配公共IP地址的机制.只要您不介意在接口上预先配置地址,就应该全部设置.
归档时间: |
|
查看次数: |
1189 次 |
最近记录: |