Kubernetes - 如何访问 minikube 中的部署?
Kubernetes - How to access deployments in minikube?
我已经使用以下配置在 minikube 上部署了一个应用程序。
部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: angular-app
spec:
replicas: 2
selector:
matchLabels:
run: angular-app
template:
metadata:
labels:
run: angular-app
spec:
containers:
- name: angular-app
image: nheidloff/angular-app
ports:
- containerPort: 80
- containerPort: 443
服务:
apiVersion: v1
kind: Service
metadata:
name: angular-app
labels:
run: angular-app
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
服务说明:
Name: angular-app
Namespace: default
Labels: run=angular-app
Annotations: <none>
Selector: <none>
Type: NodePort
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.102.174.98
IPs: 10.102.174.98
Port: http 80/TCP
TargetPort: 80/TCP
NodePort: http 31503/TCP
Endpoints: 172.17.0.3:80,172.17.0.4:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
当我尝试访问端点时,链接没有响应。但是在使用 minikube service angular-app
之后。以下出现:
|-----------|-------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|-------------|-------------|---------------------------|
| default | angular-app | http/80 | http://192.168.49.2:31503 |
|-----------|-------------|-------------|---------------------------|
Starting tunnel for service angular-app.
|-----------|-------------|-------------|------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|-------------|-------------|------------------------|
| default | angular-app | | http://127.0.0.1:60611 |
|-----------|-------------|-------------|------------------------|
使用此 ip http://127.0.0.1:60611
我可以访问该应用程序。服务描述中给出的端点有什么用?如何访问每个副本?假设我有 4 个副本,我如何访问每个副本?
服务描述中提供的端点是每个pods172.17.0.3:80,172.17.0.4:80
的端点,当您部署更多副本时,您将拥有更多端点。
angular-app 服务绑定到端口号 31503
,您可以从集群节点(而不是您的主机)访问此端口上的服务。
minikube service angular-app
将在您的主机和端口 60611
上的群集节点之间创建隧道。这意味着出现在 127.0.0.1:60611
上的任何内容都将被重定向到 192.168.49.2:31503
,然后是可用端点之一。
该服务会自动平衡所有副本之间的负载,您无需担心。
如果您想访问特定的 pod,您可以使用以下命令:
kubectl port-forward ${POD_NAME} 80:80
您需要替换上述命令中的 pod 名称,并且该命令假定端口 80
在您的计算机上可用。
~al-waleed-shihadeh 的回答是正确的,但我想提供一些额外的信息。
您也应该能够通过 NodePort 访问该服务,而无需 minikube service
命令:http://192.168.49.2:31503。端口是随机分配的,但您可以在 30000-32767
范围内选择一个固定端口
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
nodePort: 30080
如果您希望 'normal' URL 访问该服务,您必须添加允许通过反向代理访问该服务的 Ingress。它将使用 load-balancing.
路由到您的一项服务 pods
如果您希望将 URL 分别固定到每个 pods,您可以使用 StatefulSet 而不是 Deployment,并使用选择器创建 4 个不同的服务angular-app-0 到 angular-app-3,然后还有 4 个不同的入口。
我已经使用以下配置在 minikube 上部署了一个应用程序。
部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: angular-app
spec:
replicas: 2
selector:
matchLabels:
run: angular-app
template:
metadata:
labels:
run: angular-app
spec:
containers:
- name: angular-app
image: nheidloff/angular-app
ports:
- containerPort: 80
- containerPort: 443
服务:
apiVersion: v1
kind: Service
metadata:
name: angular-app
labels:
run: angular-app
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
服务说明:
Name: angular-app
Namespace: default
Labels: run=angular-app
Annotations: <none>
Selector: <none>
Type: NodePort
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.102.174.98
IPs: 10.102.174.98
Port: http 80/TCP
TargetPort: 80/TCP
NodePort: http 31503/TCP
Endpoints: 172.17.0.3:80,172.17.0.4:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
当我尝试访问端点时,链接没有响应。但是在使用 minikube service angular-app
之后。以下出现:
|-----------|-------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|-------------|-------------|---------------------------|
| default | angular-app | http/80 | http://192.168.49.2:31503 |
|-----------|-------------|-------------|---------------------------|
Starting tunnel for service angular-app.
|-----------|-------------|-------------|------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|-------------|-------------|------------------------|
| default | angular-app | | http://127.0.0.1:60611 |
|-----------|-------------|-------------|------------------------|
使用此 ip http://127.0.0.1:60611
我可以访问该应用程序。服务描述中给出的端点有什么用?如何访问每个副本?假设我有 4 个副本,我如何访问每个副本?
服务描述中提供的端点是每个pods
172.17.0.3:80,172.17.0.4:80
的端点,当您部署更多副本时,您将拥有更多端点。angular-app 服务绑定到端口号
31503
,您可以从集群节点(而不是您的主机)访问此端口上的服务。minikube service angular-app
将在您的主机和端口60611
上的群集节点之间创建隧道。这意味着出现在127.0.0.1:60611
上的任何内容都将被重定向到192.168.49.2:31503
,然后是可用端点之一。该服务会自动平衡所有副本之间的负载,您无需担心。
如果您想访问特定的 pod,您可以使用以下命令:
kubectl port-forward ${POD_NAME} 80:80
您需要替换上述命令中的 pod 名称,并且该命令假定端口 80
在您的计算机上可用。
~al-waleed-shihadeh 的回答是正确的,但我想提供一些额外的信息。
您也应该能够通过 NodePort 访问该服务,而无需
范围内选择一个固定端口minikube service
命令:http://192.168.49.2:31503。端口是随机分配的,但您可以在 30000-32767spec: type: NodePort ports: - port: 80 targetPort: 80 protocol: TCP name: http nodePort: 30080
如果您希望 'normal' URL 访问该服务,您必须添加允许通过反向代理访问该服务的 Ingress。它将使用 load-balancing.
路由到您的一项服务 pods如果您希望将 URL 分别固定到每个 pods,您可以使用 StatefulSet 而不是 Deployment,并使用选择器创建 4 个不同的服务angular-app-0 到 angular-app-3,然后还有 4 个不同的入口。