Support insecure pull (#401)
This commit is contained in:
parent
5108ee3ee1
commit
05e3250043
|
|
@ -91,7 +91,7 @@ func addKanikoOptionsFlags(cmd *cobra.Command) {
|
||||||
RootCmd.PersistentFlags().VarP(&opts.Destinations, "destination", "d", "Registry the final image should be pushed to. Set it repeatedly for multiple destinations.")
|
RootCmd.PersistentFlags().VarP(&opts.Destinations, "destination", "d", "Registry the final image should be pushed to. Set it repeatedly for multiple destinations.")
|
||||||
RootCmd.PersistentFlags().StringVarP(&opts.SnapshotMode, "snapshotMode", "", "full", "Change the file attributes inspected during snapshotting")
|
RootCmd.PersistentFlags().StringVarP(&opts.SnapshotMode, "snapshotMode", "", "full", "Change the file attributes inspected during snapshotting")
|
||||||
RootCmd.PersistentFlags().VarP(&opts.BuildArgs, "build-arg", "", "This flag allows you to pass in ARG values at build time. Set it repeatedly for multiple values.")
|
RootCmd.PersistentFlags().VarP(&opts.BuildArgs, "build-arg", "", "This flag allows you to pass in ARG values at build time. Set it repeatedly for multiple values.")
|
||||||
RootCmd.PersistentFlags().BoolVarP(&opts.InsecurePush, "insecure", "", false, "Push to insecure registry using plain HTTP")
|
RootCmd.PersistentFlags().BoolVarP(&opts.Insecure, "insecure", "", false, "Pull and push to insecure registry using plain HTTP")
|
||||||
RootCmd.PersistentFlags().BoolVarP(&opts.SkipTLSVerify, "skip-tls-verify", "", false, "Push to insecure registry ignoring TLS verify")
|
RootCmd.PersistentFlags().BoolVarP(&opts.SkipTLSVerify, "skip-tls-verify", "", false, "Push to insecure registry ignoring TLS verify")
|
||||||
RootCmd.PersistentFlags().StringVarP(&opts.TarPath, "tarPath", "", "", "Path to save the image in as a tarball instead of pushing")
|
RootCmd.PersistentFlags().StringVarP(&opts.TarPath, "tarPath", "", "", "Path to save the image in as a tarball instead of pushing")
|
||||||
RootCmd.PersistentFlags().BoolVarP(&opts.SingleSnapshot, "single-snapshot", "", false, "Take a single snapshot at the end of the build.")
|
RootCmd.PersistentFlags().BoolVarP(&opts.SingleSnapshot, "single-snapshot", "", false, "Take a single snapshot at the end of the build.")
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ type KanikoOptions struct {
|
||||||
CacheDir string
|
CacheDir string
|
||||||
Destinations multiArg
|
Destinations multiArg
|
||||||
BuildArgs multiArg
|
BuildArgs multiArg
|
||||||
InsecurePush bool
|
Insecure bool
|
||||||
SkipTLSVerify bool
|
SkipTLSVerify bool
|
||||||
SingleSnapshot bool
|
SingleSnapshot bool
|
||||||
Reproducible bool
|
Reproducible bool
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ func DoPush(image v1.Image, opts *config.KanikoOptions) error {
|
||||||
|
|
||||||
// continue pushing unless an error occurs
|
// continue pushing unless an error occurs
|
||||||
for _, destRef := range destRefs {
|
for _, destRef := range destRefs {
|
||||||
if opts.InsecurePush {
|
if opts.Insecure {
|
||||||
newReg, err := name.NewInsecureRegistry(destRef.Repository.Registry.Name(), name.WeakValidation)
|
newReg, err := name.NewInsecureRegistry(destRef.Repository.Registry.Name(), name.WeakValidation)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "getting new insecure registry")
|
return errors.Wrap(err, "getting new insecure registry")
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@ limitations under the License.
|
||||||
package util
|
package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/tls"
|
||||||
|
"net/http"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
|
|
@ -72,7 +74,7 @@ func RetrieveSourceImage(stage config.KanikoStage, buildArgs []string, opts *con
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, initialize image as usual
|
// Otherwise, initialize image as usual
|
||||||
return retrieveRemoteImage(currentBaseName)
|
return retrieveRemoteImage(currentBaseName, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RetrieveConfigFile returns the config file for an image
|
// RetrieveConfigFile returns the config file for an image
|
||||||
|
|
@ -93,18 +95,41 @@ func tarballImage(index int) (v1.Image, error) {
|
||||||
return tarball.ImageFromPath(tarPath, nil)
|
return tarball.ImageFromPath(tarPath, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func remoteImage(image string) (v1.Image, error) {
|
func remoteImage(image string, opts *config.KanikoOptions) (v1.Image, error) {
|
||||||
logrus.Infof("Downloading base image %s", image)
|
logrus.Infof("Downloading base image %s", image)
|
||||||
ref, err := name.ParseReference(image, name.WeakValidation)
|
ref, err := name.ParseReference(image, name.WeakValidation)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if opts.Insecure {
|
||||||
|
newReg, err := name.NewInsecureRegistry(ref.Context().RegistryStr(), name.WeakValidation)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if tag, ok := ref.(name.Tag); ok {
|
||||||
|
tag.Repository.Registry = newReg
|
||||||
|
ref = tag
|
||||||
|
}
|
||||||
|
if digest, ok := ref.(name.Digest); ok {
|
||||||
|
digest.Repository.Registry = newReg
|
||||||
|
ref = digest
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tr := http.DefaultTransport.(*http.Transport)
|
||||||
|
if opts.SkipTLSVerify {
|
||||||
|
tr.TLSClientConfig = &tls.Config{
|
||||||
|
InsecureSkipVerify: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
k8sc, err := k8schain.NewNoClient()
|
k8sc, err := k8schain.NewNoClient()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
kc := authn.NewMultiKeychain(authn.DefaultKeychain, k8sc)
|
kc := authn.NewMultiKeychain(authn.DefaultKeychain, k8sc)
|
||||||
return remote.Image(ref, remote.WithAuthFromKeychain(kc))
|
return remote.Image(ref, remote.WithTransport(tr), remote.WithAuthFromKeychain(kc))
|
||||||
}
|
}
|
||||||
|
|
||||||
func cachedImage(opts *config.KanikoOptions, image string) (v1.Image, error) {
|
func cachedImage(opts *config.KanikoOptions, image string) (v1.Image, error) {
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ func Test_StandardImage(t *testing.T) {
|
||||||
defer func() {
|
defer func() {
|
||||||
retrieveRemoteImage = original
|
retrieveRemoteImage = original
|
||||||
}()
|
}()
|
||||||
mock := func(image string) (v1.Image, error) {
|
mock := func(image string, opts *config.KanikoOptions) (v1.Image, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
retrieveRemoteImage = mock
|
retrieveRemoteImage = mock
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue