Облачная платформаAdvanced

Доступ к кластеру Elasticsearch с использованием Go

Эта статья полезна?
Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

В этом разделе описывается, как получить доступ к кластеру CSS с помощью Go.

Подготовка

  • Кластер CSS доступен.
  • Убедитесь, что сервер, на котором запущен Go, может взаимодействовать с кластером CSS.
  • Убедитесь, что Go установлен на сервере. Вы можете загрузить Go с официального сайта: https://go.dev/dl/.

Подключение к кластеру Non-Security Mode

Подключитесь к кластеру в режиме без безопасности. Пример кода приведён ниже:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17package main
import (
"github.com/elastic/go-elasticsearch/v7"
"log"
)
func main() {
cfg := elasticsearch.Config{
Addresses: []string{
"http://HOST:9200/",
},
}
es, _ := elasticsearch.NewClient(cfg)
log.Println(es.Info())
}

В приведённой выше информации, Хост указывает внутренний IP‑адрес узла кластера.

Подключение к кластеру в режиме Security-Mode

  • Подключитесь к кластеру в режиме security-mode с отключённым HTTPS. Пример кода приведён ниже:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19package main
    import (
    "github.com/elastic/go-elasticsearch/v7"
    "log"
    )
    func main() {
    cfg := elasticsearch.Config{
    Addresses: []string{
    "http://HOST:9200/",
    },
    Имя пользователя: "USERNAME",
    Пароль: "PASSWORD",
    }
    es, _ := elasticsearch.NewClient(cfg)
    log.Println(es.Инфо())
    }
  • Подключитесь к кластеру безопасности, в котором включён HTTPS и не используются сертификаты. Пример кода приведён ниже:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26package main
    import (
    "crypto/tls"
    "github.com/elastic/go-elasticsearch/v7"
    "log"
    "net/http"
    )
    func main() {
    cfg := elasticsearch.Config{
    Addresses: []строка{
    "https://HOST:9200/",
    },
    Имя пользователя: "USERNAME",
    Пароль: "PASSWORD",
    Транспорт: &http.Транспорт{
    TLSClientConfig: &tls.Конфиг{
    InsecureSkipVerify: true,
    },
    },
    }
    es, _ := elasticsearch.NewClient(cfg)
    log.Println(es.Info())
    }
  • Подключитесь к кластеру безопасности, в котором включён HTTPS и используются сертификаты. Пример кода приведён ниже:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58package main
    import (
    "crypto/tls"
    "crypto/x509"
    "flag"
    "github.com/elastic/go-elasticsearch/v7"
    "io/ioutil"
    "log"
    "net"
    "net/http"
    "time"
    )
    func main() {
    insecure := flag.Bool("insecure-ssl", false, "Принять/Игнорировать все SSL‑сертификаты сервера")
    flag.Parse()
    // Получить SystemCertPool, при ошибке продолжить с пустым пулом
    rootCAs, _ := x509.SystemCertPool()
    if rootCAs == nil {
    rootCAs = x509.NewCertPool()
    }
    // Чтение файла сертификата
    certs, err := ioutil.ReadFile("/tmp/CloudSearchService.cer")
    if err != nil {
    log.Fatalf("Failed to append %q to RootCAs: %v", "xxx", err)
    }
    // Добавьте наш сертификат в системный пул
    if ok := rootCAs.AppendCertsFromPEM(certs); !ok {
    log.Println(Сертификаты не добавлены, используется только системные сертификаты)
    }
    config := elasticsearch.Config{
    Addresses: []строка{
    "https://HOST:9200/",
    },
    Имя пользователя: "USERNAME",
    Пароль: "PASSWORD",
    Транспорт: &http.Транспорт{
    MaxIdleConnsPerHost: 10,
    ResponseHeaderTimeout: время.секунда,
    DialContext: (&net.Dialer{
    Timeout: 30 * время.секунда,
    KeepAlive: 30 * время.Второй,
    }).DialContext,
    TLSClientConfig: &tls.Config{
    InsecureSkipVerify: *insecure,
    RootCAs: rootCAs,
    },
    },
    }
    es, _ := elasticsearch.NewClient(config)
    log.Println(elasticsearch.Version)
    log.Println(es.Info())
    }
Table 1 Variables

Parameter

Description

HOST

IP address для доступа к кластеру Elasticsearch. Если указано несколько IP address, разделите их запятыми (,).

USERNAME

Username для доступа к кластеру.

PASSWORD

Password пользователя.

Running Code

Write the code above to the EsTest.gc файл, основанный на типе кластера, и сохраните файл в отдельный каталог. Выполните следующую команду в этом каталоге, чтобы запустить код:

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct
go env -w GONOSUMDB=*
go mod init test
go mod tidy
go run EsTest.go