diff --git a/go.mod b/go.mod index b3d905c3ea..c0258a0d86 100644 --- a/go.mod +++ b/go.mod @@ -110,12 +110,12 @@ require ( github.com/ipfs/go-log/v2 v2.5.1 github.com/joho/godotenv v1.5.1 github.com/json-iterator/go v1.1.12 - github.com/k3s-io/api v0.1.0 + github.com/k3s-io/api v0.1.1 github.com/k3s-io/helm-controller v0.16.10 github.com/k3s-io/kine v0.13.14 github.com/klauspost/compress v1.18.0 github.com/libp2p/go-libp2p v0.41.1 - github.com/minio/minio-go/v7 v7.0.83 + github.com/minio/minio-go/v7 v7.0.91 github.com/moby/sys/userns v0.1.0 github.com/mwitkow/go-http-dialer v0.0.0-20161116154839-378f744fb2b8 github.com/natefinch/lumberjack v2.0.0+incompatible @@ -270,7 +270,7 @@ require ( github.com/go-openapi/jsonreference v0.21.0 // indirect github.com/go-openapi/swag v0.23.1 // indirect github.com/go-sql-driver/mysql v1.9.1 // indirect - github.com/goccy/go-json v0.10.4 // indirect + github.com/goccy/go-json v0.10.5 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/gofrs/flock v0.8.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -348,6 +348,7 @@ require ( github.com/miekg/pkcs11 v1.1.1 // indirect github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect + github.com/minio/crc64nvme v1.0.1 // indirect github.com/minio/highwayhash v1.0.3 // indirect github.com/minio/md5-simd v1.1.2 // indirect github.com/minio/sha256-simd v1.0.1 // indirect diff --git a/go.sum b/go.sum index 31397248f7..495ef74994 100644 --- a/go.sum +++ b/go.sum @@ -529,8 +529,8 @@ github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M= github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM= -github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= +github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= +github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= @@ -773,8 +773,8 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/k3s-io/api v0.1.0 h1:YxLb/SXPqcZ/rffxrXwK3x4TfuSDxaapADZJDx3BQ50= -github.com/k3s-io/api v0.1.0/go.mod h1:9aQAaTKBFWO+BpGrMFJk9uZaUhZRrL9aahobcOQQm64= +github.com/k3s-io/api v0.1.1 h1:7ZJnCsRu88yF5MkA2bwJ7hWIRjrgALW8pRkxTXjb54U= +github.com/k3s-io/api v0.1.1/go.mod h1:9aQAaTKBFWO+BpGrMFJk9uZaUhZRrL9aahobcOQQm64= github.com/k3s-io/cadvisor v0.51.0-k3s1 h1:g44OgQMVywt+UlcLOu7OW0H32h8XVkc0pm12EPn4bvo= github.com/k3s-io/cadvisor v0.51.0-k3s1/go.mod h1:WmF2AKcyCdI0ERO3oSvLnHmiMOjRvfd2iwvoPc6urHE= github.com/k3s-io/containerd/v2 v2.0.5-k3s1.32 h1:6iaNh/IKN8y9AkzNKCIEGqm7DbOuQrjaZhmOT8gBTJY= @@ -974,13 +974,15 @@ github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4S github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= +github.com/minio/crc64nvme v1.0.1 h1:DHQPrYPdqK7jQG/Ls5CTBZWeex/2FMS3G5XGkycuFrY= +github.com/minio/crc64nvme v1.0.1/go.mod h1:eVfm2fAzLlxMdUGc0EEBGSMmPwmXD5XiNRpnu9J3bvg= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/minio/highwayhash v1.0.3 h1:kbnuUMoHYyVl7szWjSxJnxw11k2U709jqFPPmIUyD6Q= github.com/minio/highwayhash v1.0.3/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.83 h1:W4Kokksvlz3OKf3OqIlzDNKd4MERlC2oN8YptwJ0+GA= -github.com/minio/minio-go/v7 v7.0.83/go.mod h1:57YXpvc5l3rjPdhqNrDsvVlY0qPI6UTk1bflAe+9doY= +github.com/minio/minio-go/v7 v7.0.91 h1:tWLZnEfo3OZl5PoXQwcwTAPNNrjyWwOh6cbZitW5JQc= +github.com/minio/minio-go/v7 v7.0.91/go.mod h1:uvMUcGrpgeSAAI6+sD3818508nUyMULw94j2Nxku/Go= github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= diff --git a/pkg/cli/cmds/etcd_snapshot.go b/pkg/cli/cmds/etcd_snapshot.go index d9fba13576..d125926e64 100644 --- a/pkg/cli/cmds/etcd_snapshot.go +++ b/pkg/cli/cmds/etcd_snapshot.go @@ -111,6 +111,12 @@ var EtcdSnapshotFlags = []cli.Flag{ Usage: "(db) S3 bucket name", Destination: &ServerConfig.EtcdS3BucketName, }, + &cli.StringFlag{ + Name: "s3-bucket-lookup-type", + Aliases: []string{"etcd-s3-bucket-lookup-type"}, + Usage: "(db) S3 bucket lookup type, one of 'auto', 'dns', 'path'; default is 'auto' if not set", + Destination: &ServerConfig.EtcdS3BucketLookupType, + }, &cli.StringFlag{ Name: "s3-region", Aliases: []string{"etcd-s3-region"}, diff --git a/pkg/cli/cmds/server.go b/pkg/cli/cmds/server.go index e9cec7fa94..b1a905470d 100644 --- a/pkg/cli/cmds/server.go +++ b/pkg/cli/cmds/server.go @@ -105,6 +105,7 @@ type Server struct { EtcdS3SecretKey string EtcdS3SessionToken string EtcdS3BucketName string + EtcdS3BucketLookupType string EtcdS3Region string EtcdS3Folder string EtcdS3Proxy string @@ -463,6 +464,11 @@ var ServerFlags = []cli.Flag{ Usage: "(db) S3 bucket name", Destination: &ServerConfig.EtcdS3BucketName, }, + &cli.StringFlag{ + Name: "etcd-s3-bucket-lookup-type", + Usage: "(db) S3 bucket lookup type, one of 'auto', 'dns', 'path'; default is 'auto' if not set", + Destination: &ServerConfig.EtcdS3BucketLookupType, + }, &cli.StringFlag{ Name: "etcd-s3-region", Usage: "(db) S3 region / bucket location (optional)", diff --git a/pkg/cli/etcdsnapshot/etcd_snapshot.go b/pkg/cli/etcdsnapshot/etcd_snapshot.go index eaad5e3e0b..148f11b68a 100644 --- a/pkg/cli/etcdsnapshot/etcd_snapshot.go +++ b/pkg/cli/etcdsnapshot/etcd_snapshot.go @@ -55,6 +55,7 @@ func commandSetup(app *cli.Context, cfg *cmds.Server) (*etcd.SnapshotRequest, *c sr.S3 = &config.EtcdS3{ AccessKey: cfg.EtcdS3AccessKey, Bucket: cfg.EtcdS3BucketName, + BucketLookup: cfg.EtcdS3BucketLookupType, ConfigSecret: cfg.EtcdS3ConfigSecret, Endpoint: cfg.EtcdS3Endpoint, EndpointCA: cfg.EtcdS3EndpointCA, diff --git a/pkg/cli/server/server.go b/pkg/cli/server/server.go index f81eb00acb..5d1052b2e8 100644 --- a/pkg/cli/server/server.go +++ b/pkg/cli/server/server.go @@ -200,6 +200,7 @@ func run(app *cli.Context, cfg *cmds.Server, leaderControllers server.CustomCont serverConfig.ControlConfig.EtcdS3 = &config.EtcdS3{ AccessKey: cfg.EtcdS3AccessKey, Bucket: cfg.EtcdS3BucketName, + BucketLookup: cfg.EtcdS3BucketLookupType, ConfigSecret: cfg.EtcdS3ConfigSecret, Endpoint: cfg.EtcdS3Endpoint, EndpointCA: cfg.EtcdS3EndpointCA, diff --git a/pkg/daemons/config/types.go b/pkg/daemons/config/types.go index 8db40c4ea7..af1361e4e3 100644 --- a/pkg/daemons/config/types.go +++ b/pkg/daemons/config/types.go @@ -64,6 +64,7 @@ type Node struct { type EtcdS3 struct { AccessKey string `json:"accessKey,omitempty"` Bucket string `json:"bucket,omitempty"` + BucketLookup string `json:"bucketLookup,omitempty"` ConfigSecret string `json:"configSecret,omitempty"` Endpoint string `json:"endpoint,omitempty"` EndpointCA string `json:"endpointCA,omitempty"` diff --git a/pkg/etcd/s3/config_secret.go b/pkg/etcd/s3/config_secret.go index 81380873cc..a7c0ae0365 100644 --- a/pkg/etcd/s3/config_secret.go +++ b/pkg/etcd/s3/config_secret.go @@ -46,6 +46,7 @@ func (c *Controller) getConfigFromSecret(secretName string) (*config.EtcdS3, err etcdS3 := &config.EtcdS3{ AccessKey: string(secret.Data["etcd-s3-access-key"]), Bucket: string(secret.Data["etcd-s3-bucket"]), + BucketLookup: string(secret.Data["etcd-s3-bucket-lookup-type"]), Endpoint: defaultEtcdS3.Endpoint, Folder: string(secret.Data["etcd-s3-folder"]), Proxy: string(secret.Data["etcd-s3-proxy"]), diff --git a/pkg/etcd/s3/s3.go b/pkg/etcd/s3/s3.go index 2297cc4084..33a4d1d048 100644 --- a/pkg/etcd/s3/s3.go +++ b/pkg/etcd/s3/s3.go @@ -228,7 +228,7 @@ func (c *Controller) GetClient(ctx context.Context, etcdS3 *config.EtcdS3) (*Cli Secure: !etcdS3.Insecure, Region: etcdS3.Region, Transport: tr, - BucketLookup: bucketLookupType(etcdS3.Endpoint), + BucketLookup: bucketLookupType(etcdS3.Endpoint, etcdS3.BucketLookup), } mc, err := minio.New(etcdS3.Endpoint, &opt) if err != nil { @@ -586,7 +586,14 @@ func loadEndpointCAs(etcdS3EndpointCA string) (*tls.Config, error) { return nil, errors.New("no certificates loaded from etcd-s3-endpoint-ca") } -func bucketLookupType(endpoint string) minio.BucketLookupType { +func bucketLookupType(endpoint, lookupType string) minio.BucketLookupType { + switch strings.ToLower(lookupType) { + case "dns": + return minio.BucketLookupDNS + case "path": + return minio.BucketLookupPath + } + if strings.Contains(endpoint, "aliyun") { // backwards compatible with RKE1 return minio.BucketLookupDNS } diff --git a/pkg/etcd/snapshot/types.go b/pkg/etcd/snapshot/types.go index 17efc44657..362a1e0ea1 100644 --- a/pkg/etcd/snapshot/types.go +++ b/pkg/etcd/snapshot/types.go @@ -169,6 +169,7 @@ func (sf *File) FromETCDSnapshotFile(esf *k3s.ETCDSnapshotFile) { EndpointCA: esf.Spec.S3.EndpointCA, SkipSSLVerify: esf.Spec.S3.SkipSSLVerify, Bucket: esf.Spec.S3.Bucket, + BucketLookup: esf.Spec.S3.BucketLookup, Region: esf.Spec.S3.Region, Folder: esf.Spec.S3.Prefix, Insecure: esf.Spec.S3.Insecure, @@ -243,6 +244,7 @@ func (sf *File) ToETCDSnapshotFile(esf *k3s.ETCDSnapshotFile) { EndpointCA: sf.S3.EndpointCA, SkipSSLVerify: sf.S3.SkipSSLVerify, Bucket: sf.S3.Bucket, + BucketLookup: sf.S3.BucketLookup, Region: sf.S3.Region, Prefix: sf.S3.Folder, Insecure: sf.S3.Insecure,