kar*_*yan 36 portforwarding kubernetes kubectl
kubectl expose命令可用于为应用程序创建服务并分配IP地址以从Internet访问它.
据我了解,要访问Kubernetes集群中的任何应用程序,应该创建一个服务资源,并且该服务资源应具有可从外部网络访问的IP地址.
但是在端口转发的情况下kubectl如何创建与应用程序的连接而没有可从外部访问的IP地址?
lvt*_*llo 37
port-forward
将连接到本地端口转发到Pod上的端口.与之相比kubectl port-forward
,kubectl proxy
更通用,因为它可以转发TCP流量,同时kubectl port-forward
只能转发HTTP流量.
kubectl proxy
对于测试/调试目的非常有用,因此您可以在本地访问服务而不会暴露它.
下面的名字kubectl port-forward
,它会将它的端口pod
来6379
.
kubectl port-forward redis-master-765d459796-258hz 6379:6379
Run Code Online (Sandbox Code Playgroud)
这是一样的
kubectl port-forward pods/redis-master-765d459796-258hz 6379:6379
Run Code Online (Sandbox Code Playgroud)
要么
kubectl port-forward deployment/redis-master 6379:6379
Run Code Online (Sandbox Code Playgroud)
要么
kubectl port-forward rs/redis-master 6379:6379
Run Code Online (Sandbox Code Playgroud)
要么
kubectl port-forward svc/redis-master 6379:6379
Run Code Online (Sandbox Code Playgroud)
这里还有一些小端口转发示例来访问数据库服务(clusterip)而不暴露它.
Dav*_*aze 33
kubectl port-forward
提出特定的Kubernetes API请求.这意味着运行它的系统需要访问API服务器,任何流量都将通过单个HTTP连接进行隧道传输.
这对于调试非常有用(如果一个特定的pod正在运行,你可以直接连接到它;在微服务环境中,你可以与你不会暴露的后端服务交谈)但它不是设置的替代方案服务对象.当我使用kubectl port-forward
它时,它明显慢于通过服务连接到pod,我发现命令在几分钟后就停止了.这些对于调试来说也不是什么大问题,但它们不是我想要的生产系统.
Ske*_*tic 15
port-forward 命令,将一个(或多个)本地端口转发到一个 Pod。
此命令非常有用,例如在蓝/绿部署中,您希望对行为异常的 pod 进行故障排除。
更进一步,您甚至可以通过使用多个条件、声明性管道,对您认为在 Jenkins 的 CI/CD 管道中更容易出错的 pod 执行一些初步测试。
用法示例:
本地监听8888端口,转发到pod中的5000
kubectl port-forward pod/mypod 8888:5000
Run Code Online (Sandbox Code Playgroud)
监听所有地址的 8888 端口,转发到 pod 中的 5000
kubectl port-forward --address 0.0.0.0 pod/mypod 8888:5000
Run Code Online (Sandbox Code Playgroud)
Listen on a random port locally, forwarding to 5000 in the pod
kubectl port-forward pod/mypod :5000
Run Code Online (Sandbox Code Playgroud)
Listen on port 8888 on localhost and selected IP, forwarding to 5000 in the pod
kubectl port-forward --address localhost,10.19.21.23 pod/mypod 8888:5000
Run Code Online (Sandbox Code Playgroud)
Listen on ports 5000 and 6000 locally, forwarding data to/from ports 5000 and 6000 in the pod
kubectl port-forward pod/mypod 5000 6000
Run Code Online (Sandbox Code Playgroud)
Listen on ports 5000 and 6000 locally, forwarding data to/from ports 5000 and 6000 in a pod selected by the deployment
kubectl port-forward deployment/mydeployment 5000 6000
Run Code Online (Sandbox Code Playgroud)
Listen on ports 5000 and 6000 locally, forwarding data to/from ports 5000 and 6000 in a pod selected by the service
kubectl port-forward service/myservice 5000 6000
Run Code Online (Sandbox Code Playgroud)
如果要转发到localhost中的其他端口。尝试这个
kubectl port-forward <pod-name> <locahost-port>:<pod-port>
Run Code Online (Sandbox Code Playgroud)
kubectl port-forward sample-pod-sadasds-sxawdd 8090:6379
Run Code Online (Sandbox Code Playgroud)
上面的命令从pod 6379转发到localhost 8090
kubectl port-forward
是与 Pod 进行最简单的通信方法,但在底层,这种方法要复杂得多。通信通过多个 Kubernetes 组件,因此如果通信路径中出现任何问题,您将无法与 pod 通信,即使 pod 本身可以通过常规通信通道访问。
服务器代理通过kubectl port-forward
命令运行,将连接转发到Kubernetes API 服务器主节点中的,然后API 服务器将连接传递到托管 Pod 的节点上的Kubelet ,然后Kubelet将连接转发到 pod 中运行的应用程序\ 的容器。
笔记
\n\n\n容器中的应用程序必须绑定到环回设备上的端口,\nKubelet 才能访问它。如果它仅侦听\npod\xe2\x80\x99s eth0 网络接口,则\n\nkubectl port-forward 命令\xe2\x80\x99 无法访问它。
\n
Marko Luk\xc5\xa1a“Kubernetes 实战,第二版”
\n提示
\nkubectl port-forward
允许您将通信转发到服务,并具有其他一些有用的功能。跑步kubectl port-forward --help
了解更多。
要访问集群内的某些内容,有几个不同的选项可供使用:
以上两种方法都需要编写配置文件,如果您想在不编写配置文件的情况下访问 Pod,则需要使用第三种方法。
让我们看一个例子:
const stan = nats.connect('ticketing', 'abc', {
url: 'http://localhost:5000',
});
Run Code Online (Sandbox Code Playgroud)
我们的目标是在 stan 和 kubernets 集群内的 pod 之间建立连接。
首先我们需要 pod 名称,您可以通过命令kubectl get pods获取名称
kubectl get pods
Run Code Online (Sandbox Code Playgroud)
我假设我的 pod 名称是nats-depl-855d477f4d-xgbd7,并且可以通过集群 IP 服务访问它
apiVersion: v1
kind: Service
metadata:
name: nats-srv
spec:
selector:
app: nats
ports:
- name: client
protocol: TCP
port: 4222
targetPort: 4222
Run Code Online (Sandbox Code Playgroud)
现在要建立连接,运行以下命令:
kubectl port-forward nats-depl-855d477f4d-xgbd7 5000:4222
Run Code Online (Sandbox Code Playgroud)
5000:是我本机的端口
4222:是我想要访问的 Pod 的端口
归档时间: |
|
查看次数: |
34209 次 |
最近记录: |