Как развернуть сервис Kubernetes с помощью NodePort на Amazon AWS? - PullRequest
0 голосов
/ 19 марта 2020

Я создал кластер на AWS EC2, используя kops, состоящий из главного узла и двух рабочих узлов, все с назначенным publi c IPv4.

Теперь я хочу создать развертывание с помощью службы, использующей NodePort, чтобы выставить приложение для публикации c.

После создания службы я извлекаю следующую информацию, показывающую, что она правильно идентифицировала мои три модуля:

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>

Однако, когда я пытаюсь посетить любой из моих опубликованных c IPv4 на порте 30001, я не получаю ответа от сервера. Я уже создал группу безопасности, позволяющую всем входящим трафикам c на порт 30001 для всех экземпляров.

Все работает с Docker Desktop для Ma c, и здесь я замечаю следующее поле обслуживания отсутствует в выводе выше:

LoadBalancer Ingress:     localhost

Я уже изучил https://kubernetes.io/docs/concepts/services-networking/service/, и думаете, что NodePort должен служить моим потребностям?

Любая помощь приветствуется !

1 Ответ

0 голосов
/ 15 апреля 2020

Таким образом, вы хотите, чтобы служба была доступна из publi c. Для этого я бы рекомендовал создать службу ClusterIP, а затем Ingress для этой службы. Итак, говоря, что у вас есть hello-world развертывания, обслуживающий 8081, вы получите следующие два объекта:

Служба:

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: /

Примечание: тег имени в порту сервиса не является обязательным.

...