【问题标题】:kubernetes pod talking to a localhost portkubernetes pod 与 localhost 端口通信
【发布时间】:2021-02-22 20:01:35
【问题描述】:

我有一个 celery 实例在本地 kubernetes 集群的 pod 内运行,而它连接的 redis 服务器/代理是在我的 localhost:6379 上启动的,没有 kubernetes 。如何让我的 k8 pod 与本地部署的 redis 通信?

【问题讨论】:

  • 为什么redis不在pod中?
  • 当部署为 pod 时,我正在测试特定于 celery 的东西。因此没有将其他应用程序组件放到 k8 中。想知道它是否可以在没有 redis 也被部署为 pod 的情况下工作

标签: kubectl portforwarding


【解决方案1】:

你可以创建一个Headless Service和一个Endpoint,静态定义了运行redis服务器的节点的IP地址。


我创建了一个示例来说明它是如何工作的。

首先,我创建了一个Headless Service 和一个Endpoint
注意: Endpoint 具有运行redis 服务器的节点的IP 地址:

# example.yml
---
apiVersion: v1
kind: Service
metadata:
  name: redis
  namespace: default
spec:
  clusterIP: None
  ports:
  - name: redis
    port: 6379
    protocol: TCP
---
apiVersion: v1
kind: Endpoints
metadata:
  name: redis
  namespace: default
subsets:
  - addresses:
      - ip: 10.156.0.58 # your node's IP address
    ports:
      - port: 6379
        name: redis
        protocol: TCP

创建上述资源后,我们可以将redis服务名解析为IP地址:

# kubectl get svc,ep redis
NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
service/redis   ClusterIP   None         <none>        6379/TCP   28m

NAME              ENDPOINTS          AGE
endpoints/redis   10.156.0.58:6379   28m

# kubectl run dnsutils --image=gcr.io/kubernetes-e2e-test-images/dnsutils:1.3 -it --rm
/ # nslookup redis
Server:         10.96.0.10
Address:        10.96.0.10#53

Name:   redis.default.svc.cluster.local
Address: 10.156.0.58

另外,如果你的redis服务器只监听localhost,你需要修改iptables规则。要配置从端口 6379(默认 redis 端口)到 localhost 的端口转发,您可以使用:
注意: 而不是 10.156.0.58,请使用您的 redis 服务器所在节点的 IP 地址正在运行。

# iptables -t nat -A PREROUTING -p tcp -d 10.156.0.58 --dport 6379 -j DNAT --to-destination 127.0.0.1:6379

如您所见,如果 redis 不仅在 localhost 上侦听,则更容易,因为那时我们不必修改 iptables 规则。

最后,让我们看看我们是否可以从 Pod 连接到宿主机上的 redis 服务器:

# kubectl exec -it redis-client -- bash
root@redis-client:/# redis-cli -h redis
redis:6379> SET key1 "value1"
OK

【讨论】:

  • 谢谢! @WytrzymałyWiktor 是的!
  • 是否可以在spec中动态分配节点的IP地址?
猜你喜欢
  • 2020-01-09
  • 2020-03-07
  • 2020-04-20
  • 2022-12-07
  • 2019-04-02
  • 2020-01-16
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
相关资源
最近更新 更多