• Kubernetes Submit Queue's avatar
    Merge pull request #58520 from porridge/fix-connreset · c9c69013
    Kubernetes Submit Queue authored
    Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>.
    
    Make IsConnectionReset work with more error implementations.
    
    **What this PR does / why we need it**:
    This fixes the code to correctly navigate error hierarchy, and actually
    work.
    
    **Which issue(s) this PR fixes**
    An improvement for #55860
    
    **Special notes for your reviewer**:
    
    Integration-testing this code is somewhat hard. What I did to reproduce this
    condition reliably was:
    
    1. use iptables to let the TCP handshake packets through but reject
    payload-carrying packets with:
    ```
    sudo iptables -t raw -I PREROUTING -d localhost --protocol tcp --dport 443  -j NOTRACK
    sudo iptables -t filter -I INPUT -d localhost --protocol tcp --dport 443 -m string --algo bm --string http  -j REJECT --reject-with tcp-reset
    ```
    2. start a dummy server with: `nc -l -4 localhost 443`
    3. make the client issue a GET on localhost:443
    
    Then I added instrumentation to the place in k8s.io/client-go/rest/request.go
    which calls this code, to discover the actual error hierarchy.
    
    I think another way to test this would be to run a dummy server which would
    listen() on a socket, accept() and then close() the incoming connection
    straight away.
    
    **Release note**:
    ```release-note
    Correctly handle transient connection reset errors on GET requests from client library.
    ```
    c9c69013
Name
Last commit
Last update
.github Loading commit data...
Godeps Loading commit data...
api Loading commit data...
build Loading commit data...
cluster Loading commit data...
cmd Loading commit data...
docs Loading commit data...
examples Loading commit data...
hack Loading commit data...
logo Loading commit data...
pkg Loading commit data...
plugin Loading commit data...
staging Loading commit data...
test Loading commit data...
third_party Loading commit data...
translations Loading commit data...
vendor Loading commit data...
.bazelrc Loading commit data...
.generated_files Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.kazelcfg.json Loading commit data...
BUILD.bazel Loading commit data...
CHANGELOG-1.10.md Loading commit data...
CHANGELOG-1.2.md Loading commit data...
CHANGELOG-1.3.md Loading commit data...
CHANGELOG-1.4.md Loading commit data...
CHANGELOG-1.5.md Loading commit data...
CHANGELOG-1.6.md Loading commit data...
CHANGELOG-1.7.md Loading commit data...
CHANGELOG-1.8.md Loading commit data...
CHANGELOG-1.9.md Loading commit data...
CHANGELOG.md Loading commit data...
CONTRIBUTING.md Loading commit data...
LICENSE Loading commit data...
Makefile Loading commit data...
Makefile.generated_files Loading commit data...
OWNERS Loading commit data...
OWNERS_ALIASES Loading commit data...
README.md Loading commit data...
SUPPORT.md Loading commit data...
WORKSPACE Loading commit data...
code-of-conduct.md Loading commit data...
labels.yaml Loading commit data...