Mit der Go-Clientbibliothek eine Verbindung zu Spanner Omni herstellen

In diesem Dokument wird beschrieben, wie Sie sichere Verbindungen zu Spanner Omni herstellen, indem Sie die Go-Clientbibliothek konfigurieren. Sie stellen diese Verbindungen her, indem Sie Clientoptionen festlegen, wenn Sie einen Datenbankverwaltungsclient oder einen Datenbankclient erstellen.

Die Go-Clientbibliothek unterstützt Verbindungen mit unverschlüsseltem Text, TLS und mTLS. Fügen Sie für alle Verbindungstypen option.WithoutAuthentication() ein, um zu verhindern, dass Google Cloud Anmeldedaten an einen Spanner Omni-Endpunkt übertragen werden.

Weitere Informationen finden Sie unter Erste Schritte mit Spanner in Go in der Spanner-Dokumentation.

Hinweis

Wenn Sie die Go-Clientbibliothek mit Spanner Omni verbinden möchten, müssen Sie die Konfiguration IsExperimentalHost: true verwenden. Mit dieser Option wird festgelegt, dass die Bibliothek eine Verbindung zu einer lokalen oder lokalen Bereitstellung von Spanner Omni und nicht zur verwalteten Version von Spanner herstellt.

Damit Sie diese Konfigurationsoption verwenden können, muss Ihre Umgebung die folgenden Anforderungen erfüllen:

Unverschlüsselte Kommunikation

Führen Sie den folgenden Code aus, um eine unverschlüsselte Kommunikation herzustellen:

import ("google.golang.org/grpc/credentials/insecure")

adminClient, err := database.NewDatabaseAdminClient(ctx,
    option.WithEndpoint(OMNI_ENDPOINT),
option.WithoutAuthentication(),
option.WithGRPCDialOption(grpc.WithTransportCredentials(insecure.NewCredentials())),
)

clientConfig := ClientConfig{
        IsExperimentalHost: true,
    }
databaseClient, err := spanner.NewClientWithConfig(ctx, db,
clientConfig,
    option.WithEndpoint(OMNI_ENDPOINT),
option.WithoutAuthentication(),
option.WithGRPCDialOption(grpc.WithTransportCredentials(insecure.NewCredentials())),
)

TLS-Verbindung

Führen Sie den folgenden Code aus, um eine TLS-Verbindung herzustellen:

func createClients(ca_certificate, database, omniEndpoint string){
    // TLS CA cert configuration
caCert, err := os.ReadFile(ca_certificate)
    capool := x509.NewCertPool()
capool.AppendCertsFromPEM(caCert)
    creds := credentials.NewTLS(&tls.Config{RootCAs: capool})

    adminClient, err := database.NewDatabaseAdminClient(ctx,
        option.WithEndpoint(omniEndpoint),
option.WithGRPCDialOption(grpc.WithTransportCredentials(creds)),
option.WithoutAuthentication(),
)
clientConfig := ClientConfig{
        IsExperimentalHost: true,
    }
databaseClient, err := spanner.NewClientWithConfig(ctx, db,
clientConfig,
        option.WithEndpoint(omniEndpoint),
option.WithoutAuthentication(),
option.WithGRPCDialOption(grpc.WithTransportCredentials(creds)),
)
}

mTLS-Verbindung

Führen Sie den folgenden Code aus, um eine mTLS-Verbindung herzustellen:

func createClients(ca_certificate, client_certificate, client_key, database, omniEndpoint string){
    // mTLS cred configuration
    caCert, err := os.ReadFile(ca_certificate)
        capool := x509.NewCertPool()
        capool.AppendCertsFromPEM(caCert)
        cert := tls.LoadX509KeyPair(client_certificate, client_key)
        creds := credentials.NewTLS(&tls.Config{Certificates: []tls.Certificate{cert}, RootCAs: capool})

        adminClient, err := database.NewDatabaseAdminClient(ctx,
            option.WithEndpoint(omniEndpoint),
            option.WithoutAuthentication(),
    option.WithGRPCDialOption(grpc.WithTransportCredentials(creds))
    )
    clientConfig := ClientConfig{
            IsExperimentalHost: true,
        }
    databaseClient, err := spanner.NewClientWithConfig(ctx, db,
    clientConfig,
            option.WithEndpoint(omniEndpoint),
    option.WithoutAuthentication(),
    option.WithGRPCDialOption(grpc.WithTransportCredentials(creds)),
    )
}