pas*_*swd 3 networking kubernetes
我有一个企业网络(10.22.. ),它托管一个 Kubernetes 集群(10.225.0.1)。如何从集群中的 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
Run Code Online (Sandbox Code Playgroud)
但是当我从 Pod(kubectl exec -it)执行“curl http://vm-ip:30000 ”时,它会返回“连接被拒绝”错误。但它适用于“google.com”。访问外部IP的方式有哪些?
您可以为此创建一个端点。
让我们看一个例子:
在此示例中,我的网络上有一个具有 IP 的 http 服务器10.128.15.209,我希望可以从 Kubernetes 集群内的 pod 访问它。
首先是创建一个端点。这将让我创建一个指向此端点的服务,它将流量重定向到我的外部 http 服务器。
我的端点清单如下所示:
apiVersion: v1
kind: Endpoints
metadata:
name: http-server
subsets:
- addresses:
- ip: 10.128.15.209
ports:
- port: 80
Run Code Online (Sandbox Code Playgroud)
$ kubectl apply -f http-server-endpoint.yaml
endpoints/http-server configured
Run Code Online (Sandbox Code Playgroud)
让我们创建我们的服务:
apiVersion: v1
kind: Service
metadata:
name: http-server
spec:
ports:
- port: 80
targetPort: 80
Run Code Online (Sandbox Code Playgroud)
$ kubectl apply -f http-server-service.yaml
service/http-server created
Run Code Online (Sandbox Code Playgroud)
检查我们的服务是否存在并保存它的 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
Run Code Online (Sandbox Code Playgroud)
现在是时候验证我们是否可以从 pod 访问我们的服务了:
$ kubectl run ubuntu -it --rm=true --restart=Never --image=ubuntu bash
Run Code Online (Sandbox Code Playgroud)
此命令将在 ubuntu pod 内创建并打开 bash 会话。
就我而言,我将安装curl 来检查是否可以访问我的http 服务器。您可能需要安装 mysql:
root@ubuntu:/# apt update; apt install -y curl
Run Code Online (Sandbox Code Playgroud)
使用 clusterIP 检查与我的服务的连接:
root@ubuntu:/# curl 10.128.15.209:80
Hello World!
Run Code Online (Sandbox Code Playgroud)
最后使用服务名称(DNS):
root@ubuntu:/# curl http-server
Hello World!
Run Code Online (Sandbox Code Playgroud)
因此,根据您的具体情况,您必须创建:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3814 次 |
| 最近记录: |