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: