networking - Kubernetes,在集群外访问IP

标签 networking kubernetes

我有一个托管Kubernetes集群(10.225.0.1)的公司网络(10.22 ..)。如何从群集中的Pod内部访问相同网络中但群集之外的某些VM?

例如,我有一个IP为10.22.0.1:30000的VM,我需要从Kubernetes集群中的Pod进行访问。我试图创建这样的服务

apiVersion: v1
kind: Service
metadata:
  name: vm-ip
spec:
  selector:
    app: vm-ip
  ports:
    - name: vm
      protocol: TCP
      port: 30000
      targetPort: 30000
  externalIPs:
    - 10.22.0.1

但是,当我从Pod(kubectl exec -it)执行“curl http://vm-ip:30000”时,它返回“连接被拒绝”错误。但它适用于“google.com”。访问外部IP的方式有哪些?

最佳答案

您可以为此创建一个endpoint

让我们来看一个例子:

在此示例中,我的网络上有一个使用IP 10.128.15.209的http服务器,并且希望可以从Kubernetes集群中的pod中访问它。

首先是创建一个端点。这将使我创建一个指向该终结点的服务,该服务会将流量重定向到我的外部http服务器。

我的端点 list 看起来像这样:

apiVersion: v1
kind: Endpoints
metadata:
  name: http-server
subsets:
  - addresses:
      - ip: 10.128.15.209
    ports:
      - port: 80
$ kubectl apply -f http-server-endpoint.yaml
endpoints/http-server configured

让我们创建我们的服务:
apiVersion: v1
kind: Service
metadata:
  name: http-server
spec:
  ports:
    - port: 80
      targetPort: 80
$ kubectl apply -f http-server-service.yaml
service/http-server created

检查我们的服务是否存在并将其保存为clusterIP以供使用:
user@minikube-server:~$$ kubectl get service
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
http-server   ClusterIP   10.96.228.220   <none>        80/TCP    30m
kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP   10d

现在是时候验证我们是否可以从Pod访问我们的服务了:
$ kubectl run ubuntu -it --rm=true --restart=Never --image=ubuntu bash

该命令将在ubuntu pod内创建并打开bash session 。

就我而言,我将安装curl以检查是否可以访问我的http服务器。您可能需要安装mysql:
root@ubuntu:/# apt update; apt install -y curl

使用clusterIP检查与我的服务的连接性:
root@ubuntu:/# curl 10.128.15.209:80
Hello World!

最后使用服务名称(DNS):
root@ubuntu:/# curl http-server
Hello World!

因此,在您的特定情况下,您必须创建以下代码:
apiVersion: v1
kind: Endpoints
metadata:
  name: vm-server
subsets:
  - addresses:
      - ip: 10.22.0.1
    ports:
      - port: 30000
---
apiVersion: v1
kind: Service
metadata:
  name: vm-server
spec:
  ports:
    - port: 30000
      targetPort: 30000

关于networking - Kubernetes,在集群外访问IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61227474/

相关文章:

Java 网络 - 连接两台计算机

java - 读取网络共享上的文件

docker - Dockerize Wildfly和SSH

linux - 驱动程序是否使用 Linux NAPI 接口(interface)?

kubernetes - 如何将动态参数传递给运行作业的 Helm chart

ssl - 隔离 Azure Kubernetes 服务 (AKS) SSL 错误

android - 3G 连接设备和 WiFi PC 之间的 UDP

kubernetes - 如何使用 Prometheus Alert Manager 在 Kubernetes 中触发警报

cron - GCP K8S上的cron作业未运行时的CPU/内存使用情况

使用 Node-RED 作为 Kubernetes 中的服务的 HTTP 端点路由