AWS 中的 Kubernetes 入口
Kubernetes ingress in AWS
请帮助我处理我的简单应用程序的可访问性。
我用一个应用程序创建了 YML:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myapp-test
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: gcr.io/kubernetes-e2e-test-images/echoserver:2.1
ports:
- containerPort: 8080
---
apiVersion: extensions/v1beta1
kind: Service
apiVersion: v1
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
type: NodePort
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-ingress
spec:
rules:
- host: myapp.com
http:
paths:
- path: /
backend:
serviceName: myapp-service
servicePort: 80
- path: /hello
backend:
serviceName: myapp-service
servicePort: 80
然后我通过kops创建了k8s集群,这样,k8s的所有服务都起来了,我可以进入master了:
kops create cluster \
--node-count = 2 \
--node-size = t2.micro \
--master-size = t2.micro \
--master-count = 1 \
--zones = us-east-1a \
--name = ${KOPS_CLUSTER_NAME}
最后,80端口上的应用上不去,写的是连接被拒绝!
有人可以告诉我,有什么问题吗?上面的这个 yml 完全有效,但是在 minikube 环境中(
您确实创建了 Ingress 资源,但我认为您还没有为 AWS 上的本地集群部署 NGINX Ingress Controller。它解释了 here 一般如何执行此操作。
如果 的 Kubernetes 集群使用 Kops 启动,事情就更复杂了,它需要你修改现有的集群,以使用专用的 kops 附加组件:kube-ingress-aws-controller
,如他们的 github 项目页面 here
所述
在当前形式下,您的应用程序只能通过 Node/AWS 从默认范围 (30000-32767) 分配的端口上的实例外部 IP 访问。您可以通过 kubectl get svc myapp-service
) 检查当前分配的端口,但这需要首先在防火墙上打开它(默认入站规则拒绝除 SSH 之外的所有流量)。基于您 deploy/service 个清单文件:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myapp-service NodePort 100.64.187.80 <none> 80:32076/TCP 37m
在分配给我的实例的安全组的入站规则中打开端口 32076,我现在可以访问 NodePort 上的应用程序:
curl <node_external_ip>:32076
Hostname: myapp-test-f87bcbd44-8nxpn
Pod Information:
-no pod information available-
Server values:
请帮助我处理我的简单应用程序的可访问性。 我用一个应用程序创建了 YML:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myapp-test
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: gcr.io/kubernetes-e2e-test-images/echoserver:2.1
ports:
- containerPort: 8080
---
apiVersion: extensions/v1beta1
kind: Service
apiVersion: v1
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
type: NodePort
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-ingress
spec:
rules:
- host: myapp.com
http:
paths:
- path: /
backend:
serviceName: myapp-service
servicePort: 80
- path: /hello
backend:
serviceName: myapp-service
servicePort: 80
然后我通过kops创建了k8s集群,这样,k8s的所有服务都起来了,我可以进入master了:
kops create cluster \
--node-count = 2 \
--node-size = t2.micro \
--master-size = t2.micro \
--master-count = 1 \
--zones = us-east-1a \
--name = ${KOPS_CLUSTER_NAME}
最后,80端口上的应用上不去,写的是连接被拒绝! 有人可以告诉我,有什么问题吗?上面的这个 yml 完全有效,但是在 minikube 环境中(
您确实创建了 Ingress 资源,但我认为您还没有为 AWS 上的本地集群部署 NGINX Ingress Controller。它解释了 here 一般如何执行此操作。
如果 的 Kubernetes 集群使用 Kops 启动,事情就更复杂了,它需要你修改现有的集群,以使用专用的 kops 附加组件:kube-ingress-aws-controller
,如他们的 github 项目页面 here
在当前形式下,您的应用程序只能通过 Node/AWS 从默认范围 (30000-32767) 分配的端口上的实例外部 IP 访问。您可以通过 kubectl get svc myapp-service
) 检查当前分配的端口,但这需要首先在防火墙上打开它(默认入站规则拒绝除 SSH 之外的所有流量)。基于您 deploy/service 个清单文件:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myapp-service NodePort 100.64.187.80 <none> 80:32076/TCP 37m
在分配给我的实例的安全组的入站规则中打开端口 32076,我现在可以访问 NodePort 上的应用程序:
curl <node_external_ip>:32076
Hostname: myapp-test-f87bcbd44-8nxpn
Pod Information:
-no pod information available-
Server values: