@@ -34,6 +34,36 @@ import (
3434 ctrdutil "github.com/containerd/cri/pkg/containerd/util"
3535)
3636
37+ type streamListenerMode int
38+
39+ const (
40+ x509KeyPairTLS streamListenerMode = iota
41+ selfSignTLS
42+ withoutTLS
43+ )
44+
45+ func getStreamListenerMode (c * criService ) (streamListenerMode , error ) {
46+ if c .config .EnableTLSStreaming {
47+ if c .config .X509KeyPairStreaming .TLSCertFile != "" && c .config .X509KeyPairStreaming .TLSKeyFile != "" {
48+ return x509KeyPairTLS , nil
49+ }
50+ if c .config .X509KeyPairStreaming .TLSCertFile != "" && c .config .X509KeyPairStreaming .TLSKeyFile == "" {
51+ return - 1 , errors .New ("must set X509KeyPairStreaming.TLSKeyFile" )
52+ }
53+ if c .config .X509KeyPairStreaming .TLSCertFile == "" && c .config .X509KeyPairStreaming .TLSKeyFile != "" {
54+ return - 1 , errors .New ("must set X509KeyPairStreaming.TLSCertFile" )
55+ }
56+ return selfSignTLS , nil
57+ }
58+ if c .config .X509KeyPairStreaming .TLSCertFile != "" {
59+ return - 1 , errors .New ("X509KeyPairStreaming.TLSCertFile is set but EnableTLSStreaming is not set" )
60+ }
61+ if c .config .X509KeyPairStreaming .TLSKeyFile != "" {
62+ return - 1 , errors .New ("X509KeyPairStreaming.TLSKeyFile is set but EnableTLSStreaming is not set" )
63+ }
64+ return withoutTLS , nil
65+ }
66+
3767func newStreamServer (c * criService , addr , port string ) (streaming.Server , error ) {
3868 if addr == "" {
3969 a , err := k8snet .ChooseBindAddress (nil )
@@ -45,13 +75,12 @@ func newStreamServer(c *criService, addr, port string) (streaming.Server, error)
4575 config := streaming .DefaultConfig
4676 config .Addr = net .JoinHostPort (addr , port )
4777 run := newStreamRuntime (c )
48- if ! c .config .EnableTLSStreaming {
49- if c .config .X509KeyPairStreaming .TLSCertFile != "" || c .config .X509KeyPairStreaming .TLSKeyFile != "" {
50- return nil , errors .Errorf ("X509KeyPairStreaming.TLSCertFile and/or X509KeyPairStreaming.TLSKeyFile are set but EnableTLSStreaming is not set" )
51- }
52- return streaming .NewServer (config , run )
78+ tlsMode , err := getStreamListenerMode (c )
79+ if err != nil {
80+ return nil , errors .Wrapf (err , "invalid stream server configuration" )
5381 }
54- if c .config .X509KeyPairStreaming .TLSCertFile != "" && c .config .X509KeyPairStreaming .TLSKeyFile != "" {
82+ switch tlsMode {
83+ case x509KeyPairTLS :
5584 tlsCert , err := tls .LoadX509KeyPair (c .config .X509KeyPairStreaming .TLSCertFile , c .config .X509KeyPairStreaming .TLSKeyFile )
5685 if err != nil {
5786 return nil , errors .Wrap (err , "failed to load x509 key pair for stream server" )
@@ -60,19 +89,21 @@ func newStreamServer(c *criService, addr, port string) (streaming.Server, error)
6089 Certificates : []tls.Certificate {tlsCert },
6190 }
6291 return streaming .NewServer (config , run )
63- } else if c .config .X509KeyPairStreaming .TLSCertFile != "" || c .config .X509KeyPairStreaming .TLSKeyFile != "" {
64- return nil , errors .Errorf ("must set both X509KeyPairStreaming.TLSCertFile and X509KeyPairStreaming.TLSKeyFile" )
65- }
66- // generating self-sign certs
67- tlsCert , err := newTLSCert ()
68- if err != nil {
69- return nil , errors .Wrap (err , "failed to generate tls certificate for stream server" )
70- }
71- config .TLSConfig = & tls.Config {
72- Certificates : []tls.Certificate {tlsCert },
73- InsecureSkipVerify : true ,
92+ case selfSignTLS :
93+ tlsCert , err := newTLSCert ()
94+ if err != nil {
95+ return nil , errors .Wrap (err , "failed to generate tls certificate for stream server" )
96+ }
97+ config .TLSConfig = & tls.Config {
98+ Certificates : []tls.Certificate {tlsCert },
99+ InsecureSkipVerify : true ,
100+ }
101+ return streaming .NewServer (config , run )
102+ case withoutTLS :
103+ return streaming .NewServer (config , run )
104+ default :
105+ return nil , errors .New ("invalid configuration for the stream listener" )
74106 }
75- return streaming .NewServer (config , run )
76107}
77108
78109type streamRuntime struct {
0 commit comments