Kubernetes服务IP是否会发生变化?

时间:2016-09-22 22:47:29

标签: kubernetes

我对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"]

3 个答案:

答案 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地址更有意义。

请参阅http://kubernetes.io/docs/user-guide/services/#dns