通过clusterIP服务将Pod连接到Pod?

时间:2019-10-07 12:14:40

标签: kubernetes

我已经阅读了几篇有关clusterIP abd nodeport服务如何工作的文章(例如this blog

说我有3个不同的基于微服务的Web应用程序,每个应用程序都在三个单独的节点上运行。每个运行两个副本集。

我的理解是,将为应用程序副本集提供单独的clusterIP服务,而不是一个 适用于所有应用程序类型的clusterIP服务。那是对的吗 ?现在,如果一个Pod需要连接到另一个Pod,它将调用相应的Pod 将clusterIP服务连接到右Pod吗?

3 个答案:

答案 0 :(得分:1)

是的,没错。
实际上,您需要忘记关于pod的概念。

正如您所说,您创建了3个基于Web的微型服务。因此,此处的正确术语(和需要)是与(微)服务B 中的(微)服务A 联系。为此,您需要为每个kind: Service创建一个ReplicaSet

例如:

---
# This is one micro-service based on Nginx
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:alpine
          ports:
            - containerPort: 80
---
# This is the ClusterIp service corresponding
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
  - port: 8080
    targetPort: 80

在上面的示例中,我们有两个基于Nginx的微服务的副本。我们还有一个针对我们的Nginx应用程序的ClusterIP kind: Service

现在,如果我们想从另一个Pod联系Nginx,我们要做的就是使用服务名称和从集群内部配置的端口。在我们的情况下,它将是nginx:8080

要尝试此操作,您需要创建一个Pod,将其用作集群中的入口点:

---
apiVersion: v1
kind: Pod
metadata:
  name: gateway
spec:
  containers:
  - image: centos:7
    name: gateway
    command: ["bash", "-c", "sleep infinity"]

现在,如果要从集群联系您的nginx应用,则必须执行以下命令:

kubectl exec -ti gateway curl nginx:8080

答案 1 :(得分:0)

是的,设计看起来不错,对于每个微服务,您都可以部署服务和部署对象。

您总是可以ssh进入任何一个pod,然后在其中键入nslookup“ service_name”,它将为您提供完全限定的域名,并且您可以始终使用该域名进行连接,如果您的应用程序可以通过HTTP进行通信,则可以尝试这样操作(在将ssh转换为POD之后)

卷曲http://service-name.namespace.cluster.local:port

或者您也可以使用nslookup pod-name。

答案 2 :(得分:0)

如果要启用Pod之间的连接,可以在常规ClusterIP上方添加正确的Headless服务(正确的做法是)。

无头服务为部署的每个pod提供DNS条目。使用以下语法解决请求:

<pod_name>.<headless_svc_name>

在这种情况下,我建议您使用Statefulset部署:容器获得稳定的名称,例如“ pod-0”,“ pod-1” ...

相关问题