繁体   English   中英

如何在 Amazon AWS 上使用 NodePort 部署 Kubernetes 服务?

[英]How to deploy a Kubernetes service using NodePort on Amazon AWS?

我使用由一个主节点和两个工作节点组成的kops在 AWS EC2 上创建了一个集群,所有节点都分配了公共 IPv4。

现在,我想创建一个使用 NodePort 服务的部署,以向公众公开应用程序。

创建服务后,我检索了以下信息,表明它正确识别了我的三个 pod:

nlykkei:~/projects/k8s-examples$ kubectl describe svc hello-svc
Name:                     hello-svc
Namespace:                default
Labels:                   app=hello
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"hello"},"name":"hello-svc","namespace":"default"},"spec"...
Selector:                 app=hello-world
Type:                     NodePort
IP:                       100.69.62.27
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  30001/TCP
Endpoints:                100.96.1.5:8080,100.96.2.3:8080,100.96.2.4:8080
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

但是,当我尝试访问端口 30001 上的任何公共 IPv4 时,我没有收到服务器的响应。 我已经创建了一个安全组,允许所有实例的所有入口流量都通过端口 30001。

一切都适用于 Mac 的 Docker 桌面,在这里我注意到上面的输出中不存在以下服务字段:

LoadBalancer Ingress:     localhost

我已经研究过https://kubernetes.io/docs/concepts/services-networking/service/ ,并认为 NodePort 应该满足我的需求?

任何帮助表示赞赏!

所以你想要一个可以从公众访问的服务。 为了实现这一点,我建议创建一个 ClusterIP 服务,然后为该服务创建一个 Ingress。 因此,假设您在 8081 上有部署 hello-world 服务,那么您将拥有以下两个对象:

服务:

apiVersion: v1
kind: Service
metadata:
  name: hello-world
labels:
  app: hello-world
spec:
  ports:
  - name: service
    port: 8081(or whatever you want)
    protocol: TCP
    targetPort: 8080 (here goes the opened port in your pods)
  selector:
    app: hello-world
  type: ClusterIP

入口:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  labels:
    app: hello-world
  name: hello-world
spec:
  rules:
  - host: hello-world.mycutedomainname.com
    http:
      paths:
      - backend:
          serviceName: hello-world
          servicePort: 8081 (or whatever you have set for the service port)
        path: /

注意:服务端口中的名称标签是可选的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM