如何解决Kubernetes不能端口转发externalName服务
我创建的服务类型为外部名称:
apiVersion: v1
kind: Service
metadata:
name: my-service
namespace: dev
spec:
externalName: google.com
ports:
- port: 80
protocol: TCP
targetPort: 80
sessionAffinity: None
type: ExternalName
关闭K8s docs添加新端点:
apiVersion: v1
kind: Endpoints
metadata:
name: my-service
namespace: dev
subsets:
- addresses:
- ip: 172.217.20.206
ports:
- port: 80
protocol: TCP
并尝试将其转发到我的本地主机:
kubectl port-forward -n dev svc/my-service 8080:80
并收到错误:
错误:无法附加到* v1.Service:无效的服务“ my-service”: 服务的定义没有选择器
AFAIU,我按照文档的所有步骤进行操作,但是错过了?还是K8通常不提供能力端口转发externalName?
解决方法
kubectl port-forward
实际上仅将本地连接转发到单个特定的Pod。看起来您可以移植到其他内容,但这只是挑选容器的一种方式。如果您运行kubectl port-forward service/foo 12345:80
,它实际上会查看该服务选择的Pod,将服务的端口80重新映射到相应的Pod端口,然后转发到该特定Pod。
在您的情况下,这意味着您不能移植到ExternalName服务,因为它后面没有Pod,而kubectl port-forward
实际上只是转发到Pod。
还有其他一些含义(或演示)。启动运行带有3个副本的某些服务的普通部署,并在其前面安装普通服务。移植到Deployment或Service,并运行负载测试;您将只会看到一个Pod收到所有流量。删除该特定的Pod,端口转发将关闭。
如果要连接到ExternalName服务,或以其他方式执行服务更有趣的事情,则需要使连接源自群集内部。您可以kubectl run
作为示例使用临时吊舱:
kubectl run curl-test --rm --image=curlimages/curl --generator=run-pod/v1 -- \
http://my-service.dev.svc.cluster.local
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。