1

请帮助我处理我的简单应用程序的可访问性。我用一个应用程序创建了 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 环境中(

4

1 回答 1

2

事实上,您已经创建了一个 Ingress 资源,但我认为您之前没有为 AWS 上的本地集群部署 NGINX Ingress Controller。这里解释了一般如何执行此操作。

如果使用Kops引导 Kubernetes 集群,事情会更加复杂,它需要您修改现有集群,以使用专用的 kops 插件: ,如他们kube-ingress-aws-controllergithub 项目页面中所述

在当前形式下,您的应用程序只能通过从默认范围 (30000-32767) 分配的端口上的节点/AWS 实例外部 IP 访问。您可以通过 ) 检查当前分配的端口kubectl get svc myapp-service,但这需要先在防火墙上打开它(默认入站规则拒绝除 SSH 之外的所有流量)。根据您的部署/服务清单文件:

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:
于 2018-12-19T11:11:04.547 回答