Amazon web services 访问运行Kubernetes的AWS群集终结点
我是Kubernetes的新手,目前正在AWS中使用Kubeadm部署一个集群。容器部署得很好,但我似乎无法通过浏览器访问它们。当我以前通过Docker Swarm这样做时,我可以简单地使用AWS节点的IP地址通过浏览器访问和登录我的应用程序,但这似乎不适用于我当前的Kubernetes设置Amazon web services 访问运行Kubernetes的AWS群集终结点,amazon-web-services,kubernetes,Amazon Web Services,Kubernetes,我是Kubernetes的新手,目前正在AWS中使用Kubeadm部署一个集群。容器部署得很好,但我似乎无法通过浏览器访问它们。当我以前通过Docker Swarm这样做时,我可以简单地使用AWS节点的IP地址通过浏览器访问和登录我的应用程序,但这似乎不适用于我当前的Kubernetes设置 因此,我的问题是如何在这些新设置下访问正在运行的应用程序?基本上kubernetes的构造方式是不同的。首先,你的容器是隐藏的,除非你创建了一个服务来公开它们,负载平衡器或节点端口。如果创建clusterI
因此,我的问题是如何在这些新设置下访问正在运行的应用程序?基本上kubernetes的构造方式是不同的。首先,你的容器是隐藏的,除非你创建了一个服务来公开它们,负载平衡器或节点端口。如果创建clusterIP类型的服务,则它将仅从集群内部可用。为了简单起见,请使用PortForWading测试您的容器,如果一切正常,则创建一个服务来公开它们(节点端口或负载平衡器)。最好且更困难的方法是创建入口来处理入站流量和服务路由 涉水港示例:
kubectl port-forward redis-master-765d459796-258hz 6379:6379
将redis更改为pod名称和容器的相应端口 基本上kubernetes的构造方式是不同的。首先,你的容器是隐藏的,除非你创建了一个服务来公开它们,负载平衡器或节点端口。如果创建clusterIP类型的服务,则它将仅从集群内部可用。为了简单起见,请使用PortForWading测试您的容器,如果一切正常,则创建一个服务来公开它们(节点端口或负载平衡器)。最好且更困难的方法是创建入口来处理入站流量和服务路由 涉水港示例:
kubectl port-forward redis-master-765d459796-258hz 6379:6379
将redis更改为pod名称和容器的相应端口 您应该了解如何在Kubernetes中使用: Kubernetes服务是一种抽象,它定义了 POD和访问它们的策略—有时称为 微服务 基本上,服务允许从集群内部或外部到达部署(或Pod) 在您的情况下,如果您想在AWS中公开单个服务,它非常简单:
apiVersion: v1
kind: Service
metadata:
name: myApp
labels:
app: myApp
spec:
ports:
- port: 80 #port that the service exposes
targetPort: 8080 #port of a container in "myApp"
selector:
app: myApp #your deployment must have the label "app: myApp"
type: LoadBalancer
您可以在AWS EC2控制台的“弹性负载平衡器”下或使用
kubectl description Service myApp
检查服务是否成功创建。您应该了解如何在Kubernetes中使用:
Kubernetes服务是一种抽象,它定义了
POD和访问它们的策略—有时称为
微服务
基本上,服务允许从集群内部或外部到达部署(或Pod)
在您的情况下,如果您想在AWS中公开单个服务,它非常简单:
apiVersion: v1
kind: Service
metadata:
name: myApp
labels:
app: myApp
spec:
ports:
- port: 80 #port that the service exposes
targetPort: 8080 #port of a container in "myApp"
selector:
app: myApp #your deployment must have the label "app: myApp"
type: LoadBalancer
您可以在AWS EC2控制台的“弹性负载平衡器”下或使用
kubectl Descripte Service myApp
检查该服务是否成功创建。这两个答案都有助于我找到问题的解决方案,但我最终迷失在细节中。下面是一个可以帮助其他类似情况的示例:
1)考虑以下应用YAML:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-web-app
labels:
app: my-web-app
spec:
serviceName: my-web-app
replicas: 1
selector:
matchLabels:
app: my-web-app
template:
metadata:
labels:
app: my-web-app
spec:
containers:
- name: my-web-app
image: myregistry:443/mydomain/my-web-app
imagePullPolicy: Always
ports:
- containerPort: 8080
name: cp
---
apiVersion: v1
kind: Service
metadata:
name: my-web-app
labels:
name: my-web-app
spec:
type: NodePort
ports:
- name: http1
port: 80
nodePort: 30036
targetPort: 8080
protocol: TCP
selector:
name: my-web-app
2) 我决定采用节点端口(感谢@Leandro指出这一点)来公开我的服务,因此我在应用程序yaml中添加了以下内容:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-web-app
labels:
app: my-web-app
spec:
serviceName: my-web-app
replicas: 1
selector:
matchLabels:
app: my-web-app
template:
metadata:
labels:
app: my-web-app
spec:
containers:
- name: my-web-app
image: myregistry:443/mydomain/my-web-app
imagePullPolicy: Always
ports:
- containerPort: 8080
name: cp
---
apiVersion: v1
kind: Service
metadata:
name: my-web-app
labels:
name: my-web-app
spec:
type: NodePort
ports:
- name: http1
port: 80
nodePort: 30036
targetPort: 8080
protocol: TCP
selector:
name: my-web-app
我缺少的一点是,两个集合中的标签名称必须匹配,才能将我的web app:StatefulSet
(1)链接到我的web app:Service
(2)。然后,mywebapp:StatefulSet:containerPort
必须与mywebapp:Service:targetPort
(8080)相同。最后,myweb应用程序:Service:nodePort
是我们公开的端口,它的值必须介于30000-32767之间
3) 最后一步是确保AWS中的安全组允许所选my web app:Service:nodePort
(在本例中为30036)的入站流量,如果不允许,则添加规则
遵循这些步骤后,我能够通过aws节点ip:30036/我的web应用程序访问我的应用程序这两个答案都有助于我寻求问题的解决方案,但我最终迷失在细节中。下面是一个可以帮助其他类似情况的示例:
1)考虑以下应用YAML:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-web-app
labels:
app: my-web-app
spec:
serviceName: my-web-app
replicas: 1
selector:
matchLabels:
app: my-web-app
template:
metadata:
labels:
app: my-web-app
spec:
containers:
- name: my-web-app
image: myregistry:443/mydomain/my-web-app
imagePullPolicy: Always
ports:
- containerPort: 8080
name: cp
---
apiVersion: v1
kind: Service
metadata:
name: my-web-app
labels:
name: my-web-app
spec:
type: NodePort
ports:
- name: http1
port: 80
nodePort: 30036
targetPort: 8080
protocol: TCP
selector:
name: my-web-app
2) 我决定采用节点端口(感谢@Leandro指出这一点)来公开我的服务,因此我在应用程序yaml中添加了以下内容:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-web-app
labels:
app: my-web-app
spec:
serviceName: my-web-app
replicas: 1
selector:
matchLabels:
app: my-web-app
template:
metadata:
labels:
app: my-web-app
spec:
containers:
- name: my-web-app
image: myregistry:443/mydomain/my-web-app
imagePullPolicy: Always
ports:
- containerPort: 8080
name: cp
---
apiVersion: v1
kind: Service
metadata:
name: my-web-app
labels:
name: my-web-app
spec:
type: NodePort
ports:
- name: http1
port: 80
nodePort: 30036
targetPort: 8080
protocol: TCP
selector:
name: my-web-app
我缺少的一点是,两个集合中的标签名称必须匹配,才能将我的web app:StatefulSet
(1)链接到我的web app:Service
(2)。然后,mywebapp:StatefulSet:containerPort
必须与mywebapp:Service:targetPort
(8080)相同。最后,myweb应用程序:Service:nodePort
是我们公开的端口,它的值必须介于30000-32767之间
3) 最后一步是确保AWS中的安全组允许所选my web app:Service:nodePort
(在本例中为30036)的入站流量,如果不允许,则添加规则
完成这些步骤后,我可以通过aws节点ip:30036/我的web应用程序访问我的应用程序谢谢Leandro。执行该命令后,我将能够访问我的应用程序,如::8090/myapp?此命令将允许您访问localhost:8090。你可以这样测试你的应用程序。它不定义路径。是否要在节点ip上公开?如果是这样,您需要为它创建一个服务,NodeIP会为您解决。启动该命令,然后它会将所有流量转发到您的计算机。您正在使用该命令吗?kubectl港口前吊舱名称港口集装箱:港口本地。可能您使用了错误的端口。另外,您的应用程序应该在浏览器上显示什么?尝试在localhost上卷曲应用程序地址。谢谢Leandro。一旦我执行了命令,