我有这样的东西:
POD-1
|
-------------------------
?|? ?|? ?|?
service-1 service-2 service-3
如何从Pod内部的服务器与服务后面Pod中的其他服务器通信?
答案 0 :(得分:7)
您需要为要访问的窗格提供服务。您可以只使用容器相应服务的内部端点。
作为示例,我们假设有一个mysql
吊舱和一个与之相对应的服务,类型为ClusterIP类型的mysql-svc
,如下所示暴露了端口3306。
apiVersion: v1
kind: Service
metadata:
name: mysql-svc
spec:
ports:
- name: db-port
protocol: "TCP"
port: 3306
targetPort: 3306
selector:
app: mysql
还有一个单独的使用该mysql的python应用程序pod。您可以使用mysql://mysql-svc:3306/dbName
的内部端点mysql-svc
访问pod内的mysql服务器
如果您的Pod位于两个不同的命名空间(dev
命名空间中的mysql和qa
命名空间中的python app),则可以使用mysql-svc.dev.svc.cluster.local
。
答案 1 :(得分:0)
如果您还有其他带有Pod的服务,则可以使用群集内部DNS进行访问:
对于名称空间foo
中的服务bar
,URL为foo.bar.svc.cluster.local
。最后一部分cluster.local
可以根据部署集群的方式进行更改。 kops
可让您为其指定不同的值。
在同一个命名空间中进行通信时,您甚至不需要bar
,只需使用不同的协议(例如mongo / rabbit / postgrest等)进行http://foo/
或foo:port
>
答案 2 :(得分:0)
仅使用 svc-name.namespace-name
即可访问同一群集中其他命名空间上的Pod。SVC名称:foo
命名空间名称:bar
例如:foo.bar
答案 3 :(得分:-1)
如果您想在群集内部进行内部通信而不暴露于Internet HTTP / HTTPS,我建议您部署一个带有nodeport的Nginx Pod,然后在此Nginx Pod中提供配置,以基于每个服务的路径路由您的请求。请参阅:https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#exposing-the-service
要从Internet访问,请参考https://kubernetes.io/docs/concepts/services-networking/ingress/
中的说明,在不同的节点端口上运行每个服务