我对kubernetes / docker很新,如果这是一个愚蠢的问题,请道歉。
我有一个正在访问一些服务的pod。在我的容器中,我正在运行python脚本,需要访问该服务。目前我正在使用服务的IP地址。
服务IP地址是稳定的还是使用environment variables更好?如果是这样,有关这方面的一些提示会很棒。
Services Documentation的开头段落为服务提供了动力,这意味着IP地址稳定,但我从未明确指出:
虽然每个Pod都有自己的IP地址,但甚至不能依赖这些IP地址保持稳定。这会导致一个问题:如果某些Pod(让我们称之为后端)为Kubernetes集群内的其他Pod(让我们称之为前端)提供功能,那些前端如何找出并跟踪该集合中的哪些后端?
输入服务。
我的pod规范供参考:
kind: Pod
apiVersion: v1
metadata:
name: fetchdataiso
labels:
name: fetchdataiso
spec:
containers:
- name: fetchdataiso
image: 192.111.1.11:5000/ncllc/fetch_data
command: ["python"]
args: ["feed/fetch_data.py", "-hf", "10.222.222.51", "-pf", "8880", "-hi", "10.223.222.173", "-pi","9101"]
答案 0 :(得分:2)
简短的回答是"是的,服务IP可以改变"
$ kubectl apply -f test.svc.yml
service "test" created
$ kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.12.0.1 <none> 443/TCP 10d
test 10.12.172.156 <none> 80/TCP 6s
$ kubectl delete svc test
service "test" deleted
$ kubectl apply -f test.svc.yml
service "test" created
$ kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.12.0.1 <none> 443/TCP 10d
test 10.12.254.241 <none> 80/TCP 3s
答案很长,如果你正确使用它,你将没有任何问题。在你的问题范围内更重要的是ENV变量比DNS / IP耦合更糟糕。 您应该通过服务或 service.namespace 来引用您的服务,或者甚至是像 test.default.svc.cluster.local 那样的完整路径。 STRONG>。这将解析为服务ClusterIP,并且与您的ENV相反,它可以重新解析为新IP(除非您明确删除并重新创建服务,否则可能永远不会发生),而正在运行的进程的ENV将不会被更改
答案 1 :(得分:0)
服务IP地址稳定。如果您没有更好的方法来发现IP地址(例如DNS),则只需要使用环境变量。
答案 2 :(得分:0)
如果您使用群集中的DNS群集插件来访问您的服务,并且您的服务在名称空间foo
中被称为bar
,您还可以将其作为bar.foo
访问,这是assetGenerator.copyCGImageAtTime
可能比普通IP地址更有意义。