【发布时间】:2018-04-25 00:04:52
【问题描述】:
我安装了 minikube 来更好地学习 kubernetes。
我已经部署了一些应用程序和服务,这些应用程序和服务的 IP 地址范围为10.x.x.x(私有 IP)。我可以在 minikube 上公开我的服务并在浏览器中访问它们。但我想使用私有 IP 而不是公开它。
如何在 minikube 中访问 (vpn/proxy wize) 服务的私有 IP?
【问题讨论】:
标签: kubernetes minikube
我安装了 minikube 来更好地学习 kubernetes。
我已经部署了一些应用程序和服务,这些应用程序和服务的 IP 地址范围为10.x.x.x(私有 IP)。我可以在 minikube 上公开我的服务并在浏览器中访问它们。但我想使用私有 IP 而不是公开它。
如何在 minikube 中访问 (vpn/proxy wize) 服务的私有 IP?
【问题讨论】:
标签: kubernetes minikube
Minikube 是Kubernetes,只有一个节点和主服务器在该节点上运行。 它提供了了解它如何在所需的最少硬件条件下工作的可能性。 它非常适合用于测试目的和在笔记本电脑上无缝运行。 Minikube 仍然是成熟的软件 来自 Kubernetes 的网络堆栈。这意味着端口暴露给服务,而实际上服务是 与 pod 通信。
要了解什么是通信,让我解释一下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 - 首先检查kubectl 命令行工具是否可以与您的minikube 集群通信,如果是则从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 作为常规网络服务处理不是一个好习惯 - 在最坏的情况下,它会通过无效的内部网络连接状态很快破坏集群。
【讨论】: