是否可以从本地网络连接到内部kubernetes服务?例如,我在kubernetes集群之外有vm,但在与kubernete集群相同的网络上(我可以从vm ping私有节点ip(,我想从该vm连接到内部kubernets服务,如http://sample-service.default.svc.cluster.local来自本地网络
我试着遵循这个教程https://blog.heptio.com/configuring-your-linux-host-to-resolve-a-local-kubernetes-clusters-service-urls-a8c7bdb212a7但仍然不工作
是的,您需要将服务类型更改为NodePort
:https://kubernetes.io/docs/concepts/services-networking/service/#nodeport.然后,您的服务将可以从您的任何Kubernetes工作节点访问,使用其IP地址和下面命令显示的NodePort
(>30000(。
例如:
$ kubectl get svc parse-server
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
parse-server NodePort 10.96.139.142 <none> 1337:31013/TCP 17h
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
...
kind-worker2 Ready <none> 42h v1.19.1 172.18.0.2 <none> Ubuntu Groovy Gorilla (development branch) 4.15.0-1101-oem containerd://1.4.0
然后服务parse-server
可以使用从本地网络访问
$ curl http://172.18.0.2:31013
<!DOCTYPE html>
<html lang="en">
...
NodePort
是在Kubernetes集群之外公开服务的最简单方法,但如果您需要更高级的功能,如通过url路径或主机名进行路由,则需要研究ingress:https://kubernetes.io/docs/concepts/services-networking/ingress/.