Как отправить запрос GET / POST от Lambda на модуль с сервисом ClusterIP - PullRequest
1 голос
/ 08 мая 2019

Я пытаюсь отправить запрос GET от Lambda на модуль, не подвергая его внешнему воздействию.К этому модулю подключен сервис ClusterIP.Я могу получить доступ к этому модулю напрямую через Интернет (через вход), поэтому я знаю, что он работает правильно.

Вот часть службы, прикрепленная к модулю:

spec:
  clusterIP: 10.xxx.xxx.xx
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: app_name
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

Я подключил лямбду кvpc и подсети, но если я использую приведенный ниже код, я получаю сообщение об ошибке.Я попытался использовать IP-адрес модуля и IP-адрес кластера, но с той же ошибкой.Это работает для Google / других сайтов и когда модуль открыт для доступа в Интернет.

    const http = require('http');
    exports.handler = async (event, context) => {
    return new Promise((resolve, reject) => {
        const options = {
            host: 'www.google.com',
            path: '/api/',
            port: 80,
            method: 'GET'
        };
        const req = http.request(options, (res) => {
          let data = '';

          // A chunk of data has been recieved.
          res.on('data', (chunk) => {
            data += chunk;
          });

          // The whole response has been received. Print out the result.
          res.on('end', () => {
            console.log(JSON.parse(data));
            });

        });
        req.write('');
        req.end();
    });
};

Ответ:

{
  "errorMessage": "Task timed out after 3.00 seconds"
}

Я понимаю все ниже и я рад сменить услугувведите, но я не знаю, как я должен обратиться к стручку в моей лямбде (замените www.google.com чем-то).Рад попробовать любой другой код или скрипт на python.

A ClusterIP service is the default Kubernetes service. It gives you a service inside your cluster that other apps inside your cluster can access. There is no external access.

A NodePort service is the most primitive way to get external traffic directly to your service. NodePort, as the name implies, opens a specific port on all the Nodes (the VMs), and any traffic that is sent to this port is forwarded to the service.

A LoadBalancer service is the standard way to expose a service to the internet. On GKE, this will spin up a Network Load Balancer that will give you a single IP address that will forward all traffic to your service.

Кто-нибудь пробовал что-то подобное?

1 Ответ

2 голосов
/ 08 мая 2019

Один из самых простых способов - открыть сервис за внутренним балансировщиком нагрузки.Таким образом, ваша служба не будет подключена к Интернету, но будет по-прежнему доступна в VPC.

apiVersion: v1
kind: Service
metadata:
  name: my-service
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
spec:
  type: LoadBalancer
  selector:
    app: MyApp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

Немного более продвинутым, но более гибким решением является использование Nginx Ingress стот же внутренний балансировщик нагрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...