我安装minikube是为了更好地学习kubernetes。我已经部署了一些应用程序和服务,它们的ip在10.x.x.x
(内网ip)范围内。我可以在minikube上公开我的服务,并在我的浏览器中访问它们。但是我想使用内网IP,而不是暴露它。
如何访问minikube中服务的(vpn/proxy wize)内网ip?
发布于 2018-04-25 00:04:53
Minikube是只有一个节点和主服务器在此节点上运行的Kubernetes。它提供了学习如何在所需最少硬件的情况下工作的可能性。它是测试目的的理想之选,并且可以在笔记本电脑上无缝运行。Minikube仍然是来自Kubernetes的成熟网络栈的软件。这意味着端口向服务公开,并且虚拟服务与pods进行通信。
为了理解通信的内容,让我解释一下ClusterIP的作用--它在集群中的一个内部IP上公开服务。此类型使服务只能从群集内访问。
集群IP可以通过以下命令获取:
kubectl get services test_service
因此,在创建新服务之后,您希望建立到ClusterAPI的连接。
基本上,有三种方式可以连接到后台资源:
1/使用kube-proxy -此代理将Kubernetes API中定义的服务和简单的TCP和UDP流反映到后端或高级配置中的一组后端。服务集群IP和端口当前是通过指定服务代理打开的端口的Docker compatible environment variables找到的。有一个可选的插件可以为这些集群IP提供集群DNS。用户必须使用apiserver API创建服务才能配置代理。
示例显示了如何使用节点选择器来定义到ClusterIP上端口5000的连接- config.yaml可能包括:
kind: Service
apiVersion: v1
metadata:
name: jenkins-discovery
namespace: ci spec:
type: ClusterIP
selector:
app: master
ports:
- protocol: TCP
port: 50000
targetPort: 50000
name: slaves
2/使用port forwarding to access application -首先检查用于与您的minikube群集通信的kubectl命令行工具是否正常工作,如果是,请从ClusterIP配置中查找服务端口。
kubectl get svc | grep test_service
假设服务test_service在端口5555上工作,因此要进行端口转发,请运行以下命令:
kubectl port-forward pods/test_service 5555:5555
之后,您的服务将在localhost:5555上可用
3/如果您熟悉pods networking的概念,则可以在pod的清单文件中声明公共端口。用户可以连接到定义清单的pods网络:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 8080
当容器以清单文件启动时,TCP端口8080将被转发到pod端口8080。
请记住,对于集群的正常工作,ClusterIP使用了大量的服务。我认为将ClusterIP作为常规的网络服务来处理并不是一个好的做法--在最坏的情况下,它很快就会因为连接的无效内部网络状态而中断集群。
https://stackoverflow.com/questions/49970656
复制相似问题