"kubectl exec" in Cygwin gets "Upgrade request required", but not in cmd shell

Marco Atzeri marco.atzeri@gmail.com
Sun Jun 14 17:03:53 GMT 2020


On 14.06.2020 17:38, David Karr wrote:
> 
> On Sun, Jun 14, 2020 at 2:25 AM Marco Atzeri wrote:
> 
>     On 14.06.2020 08:12, David Karr wrote:
>      >
>      >
>      > On Sat, Jun 13, 2020 at 10:31 PM Marco Atzeri via Cygwin wrote:
>      >
>      >     On 13.06.2020 20:53, David Karr via Cygwin wrote:
>      >      > I've been using kubectl in Cygwin on Windows 10 for quite
>     a while, to
>      >      > communicate to our in-house k8s clusters. I often use "kubectl
>      >     exec" to
>      >      > open a shell in a container or directly execute a shell
>     command.
>      >     This has
>      >      > worked perfectly fine for a long time.
>      >      >
>      >      > A couple of days ago, I discovered that all of these attempts
>      >     were failing
>      >      > with "Upgrade request required".  I hadn't upgraded kubectl or
>      >     Cygwin in
>      >      > quite a while. I doubt our clusters had a k8s upgrade, but
>     it's
>      >     entirely
>      >      > possible.
>      >      >
>      >      > A colleague of mine has a very similar desktop configuration
>      >     (Windows 10,
>      >      > Cygwin), and he's not seeing this symptom.
>      >      >
>      >      > I noticed that when I ran "kubectl exec" with max
>     verbosity, it
>      >     shows the
>      >      > resulting "curl" command that it runs. I tried that resulting
>      >     command, and
>      >      > it results in the same response. I then tried updating my
>     Cygwin
>      >     tools and
>      >      > retesting, no change.
>      >      >
>      >      > I then took the entire resulting "kubectl exec" command
>     line and
>      >     ran it in
>      >      > a "cmd" shell.  No problem at all.  No error.
>      >      >
>      >      > I know I haven't provided much useful information yet. I
>     wanted
>      >     to get an
>      >      > initial response before I started providing those
>     diagnostics. Is
>      >     there a
>      >      > clear issue here that I'm not aware of?
>      >      > --
>      >
>      >     from where is kubectl coming from ?
>      >
>      >     In cygwin I found only a kubectl.py in the ansible package
>      >
>      >
>      > It's from here:
>      >
>     https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-windows
> 
>      > .
> 
>     so it is NOT a cygwin program.
> 
>     If the warning is coming about curl, it is likely
>     that using from cygwin you are using the cygwin curl
>     and from CMD the windows one
> 
> 
>     $ which -a curl
>     /usr/bin/curl
>     /cygdrive/c/WINDOWS/system32/curl

>     the support Forum https://discuss.kubernetes.io/
>     is probably the most indicate place for guidance
> 
>     Regards
>     Marco
> 
> 
> I thought it was obvious that it was not working because it was calling 
> the Cygwin curl. I wouldn't have posted here if that wasn't obvious to me.

Obvious not so much to me, evidently ;-)

> And since I'm well aware of the k8s community, I already posted 
> questions about this in the appropriate place, before I posted here.
> 
> What I was hoping to get here was some indication or thoughts on why a 
> process using Windows curl doesn't have a problem, but does have a 
> problem when using Cygwin Curl. This isn't likely something that Cygwin 
> curl is doing "wrong", it's just that it's doing something different.

the Cygwin curl was changed last time on 18 Sep 2019.
So it is not something directly depending from the package, maybe from
the dependencing libraries.

Comparing the help and version outputs the cygwin one is coming from a 
more recent version and has more features than the windows one ;
the only major difference I see is that the windows version
produces output with CRLF termination.

It is possible that kubectl is doing a version check and it misleading
reports a different version as older one.

> If it matters, the following is an elided version of the resulting curl 
> command:
> 
>      curl -k -v -XPOST  -H "User-Agent: kubectl.exe/v1.18.0 
> (windows/amd64) kubernetes/9e99141" -H "Authorization: Bearer ..." -H 
> "X-Stream-Protocol-Version: v4.channel.k8s.io 
> <http://v4.channel.k8s.io>" -H "X-Stream-Protocol-Version: 
> v3.channel.k8s.io <http://v3.channel.k8s.io>" -H 
> "X-Stream-Protocol-Version: v2.channel.k8s.io 
> <http://v2.channel.k8s.io>" -H "X-Stream-Protocol-Version: 
> channel.k8s.io <http://channel.k8s.io>" 
> 'https://.../api/v1/namespaces/.../pods/.../exec?command=%2Fbin%2Fls&container=...&stderr=true&stdin=true&stdout=true'
> 
> I can't tell from the logging what request body it sent. It's possible 
> it didn't send any.

all the options used are basic and present in both versions.
May be CRLF vs LF is present also on POST method

Regards
Marco


More information about the Cygwin mailing list