Kubernetes 通过 http 请求访问其他命名空间中的服务



我在默认命名空间中有一个 InfluxDB 作为数据库服务。 它的服务称为influxdb,可以与chronograf很好地可视化数据。

现在我想将其他部署从 namspace测试连接到此服务。这是一个python应用程序。普通的python Influxdb Lib使用Requests连接到数据库。

体系结构概述

还安装了 Istio。

空间:默认

  • Influxdb Deployment
  • 流入数据库服务
  • Chronograf Deployment (visualise influxdb(
  • Chronograf Service to Ingress(用于外部网络访问(

命名空间:测试

  • Python 应用程序,应连接到 influxdb 进行处理等。
  • Influxdb Service(指向influxdb.default.svc.cluster.local(

因此,我在命名空间测试中创建了一个服务,该服务指向默认命名空间中 influxdb 的服务。

apiVersion: v1
kind: Service
metadata:
name: influxdb
labels:
app: pythonapp
namespace: test
spec:
type: ExternalName
externalName: influxdb.default.svc.cluster.local
ports:
- port: 8086
name: http
- port: 8088
name: http-flux

现在部署了指向influxdb服务的python应用程序。不断收到http连接错误。

2020-07-03 13:02:05 - db.meterdb [meterdb.__init__:57] - ERROR - Oops, something wen't wrong during init of db. message: HTTPConnectionPool(host='influxdb', port=8086): Max retries exceeded with url: /query?q=SHOW+DATABASES (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f6863ed6310>: Failed to establish a new connection: [Errno 111] Connection refused'))
2020-07-03 13:02:05 - db.meterdb [meterdb.check_connection:113] - ERROR - can't reach db server... message: HTTPConnectionPool(host='influxdb', port=8086): Max retries exceeded with url: /ping (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f6863e57650>: Failed to establish a new connection: [Errno 111] Connection refused'))

当我使用 kiali 可视化流量时,我看到 Python 应用程序尝试连接到 influxdb 服务,但对于 http 流量是未知的。

我不知道如何让它工作以使用创建的 influxdb 服务。

python influxdb 客户端库的连接设置。链接到python influxdb lib

  • 主机=流入数据库
  • 端口 = 8086

来自基亚利的交通

如何将交通转折号路由到正确的服务? 在我看来,它将 traffik 路由到未知服务,因为它是 http 而不是 tcp。

你不需要

kind: Service
metadata:
name: influxdb
labels:
app: pythonapp
namespace: test

只需直接在 python 请求中访问该服务:

requests.get('influxdb.default.svc.cluster.local:8086')

这可以更易于配置。

# Kubernetes deployment
containers:
- name: pythonapp
env:
- name: DB_URL
value: influxdb.default.svc.cluster.local:8086
# python
DB = os.environ['DB_URL']
requests.get(DB)

最新更新