Production-Grade Container Scheduling and Management
Go to file
Kubernetes Submit Queue f0ca996274
Merge pull request #56164 from danwinship/proxier-chain-split
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>.

Split KUBE-SERVICES chain to re-shrink the INPUT chain

**What this PR does / why we need it**:
#43972 added an iptables rule "`-A INPUT -j KUBE-SERVICES`" to make NodePort ICMP rejection work. (Previously the KUBE-SERVICES chain was only run from OUTPUT, not INPUT.) #44547 extended that patch for ExternalIP rejection as well.

However, the KUBE-SERVICES chain may potentially have a very large number of ICMP reject rules for plain ClusterIP services (the ones that get run from OUTPUT), and it seems that for some reason the kernel is much more sensitive to the length of the INPUT chain than it is to the length of the OUTPUT chain. So a node that worked fine with kube 1.6 (when KUBE-SERVICES was only run from OUTPUT) might fall over with kube 1.7 (with KUBE-SERVICES being run from both INPUT and OUTPUT).

(Specifically, a node with about 5000 ClusterIP reject rules that ran fine with OpenShift 3.6 [kube 1.6] slowed almost to a complete halt with OpenShift 3.7 [kube 1.7].)

This PR fixes things by splitting out the "new" part of KUBE-SERVICES (NodePort and ExternalIP reject rules) into a separate KUBE-EXTERNAL-SERVICES chain run from INPUT, and moves KUBE-SERVICES back to being only run from OUTPUT. (So, yes, this assumes that you don't have 5000 NodePort/ExternalIP services, but, if you do, there's not much we can do, since those rules *have* to be run on the INPUT side.)

Oh, and I left in the code to clean up the "`-A INPUT -j KUBE-SERVICES`" rule even though we don't generate it any more, so it gets fixed on upgrade.

**Release note**:
```release-note
Reorganized iptables rules to fix a performance regression on clusters with thousands of services.
```

@kubernetes/sig-network-bugs @kubernetes/rh-networking
2018-02-22 18:52:53 -08:00
.github
api Merge pull request #55168 from nikhita/customresources-subresources 2018-02-22 13:37:35 -08:00
build Merge pull request #57648 from Fsero/bugfix/add_ipset_binary_for_ipvs 2018-02-21 11:42:42 -08:00
cluster Merge pull request #59973 from kawych/e2e 2018-02-22 16:32:49 -08:00
cmd Merge pull request #55168 from nikhita/customresources-subresources 2018-02-22 13:37:35 -08:00
docs Merge pull request #59157 from vladimirvivien/csi-volsource-beta 2018-02-21 16:55:36 -08:00
examples examples/podsecuritypolicy: add owners. 2018-02-22 21:46:15 +01:00
Godeps Merge pull request #58816 from croomes/storageos_containerized_kubelet 2018-02-22 18:11:34 -08:00
hack Merge pull request #55168 from nikhita/customresources-subresources 2018-02-22 13:37:35 -08:00
logo
pkg Merge pull request #56164 from danwinship/proxier-chain-split 2018-02-22 18:52:53 -08:00
plugin Merge pull request #59949 from nicksardo/deprecate-cloud-provider 2018-02-21 16:55:41 -08:00
staging Merge pull request #55168 from nikhita/customresources-subresources 2018-02-22 13:37:35 -08:00
test Merge pull request #59973 from kawych/e2e 2018-02-22 16:32:49 -08:00
third_party Autogenerated: hack/update-bazel.sh 2018-02-16 13:43:01 -08:00
translations Add OWNERS for translations folder 2018-02-04 23:54:07 -08:00
vendor Merge pull request #58816 from croomes/storageos_containerized_kubelet 2018-02-22 18:11:34 -08:00
.bazelrc
.generated_files
.gitattributes
.gitignore fix all the typos across the project 2018-02-11 11:04:14 +08:00
.kazelcfg.json
BUILD.bazel
CHANGELOG-1.2.md
CHANGELOG-1.3.md
CHANGELOG-1.4.md fix the format for github error 2018-02-02 18:44:27 +08:00
CHANGELOG-1.5.md fix typo in kubeadm 2018-02-06 13:48:18 +08:00
CHANGELOG-1.6.md
CHANGELOG-1.7.md
CHANGELOG-1.8.md Update CHANGELOG-1.8.md for v1.8.8. 2018-02-09 15:01:39 -08:00
CHANGELOG-1.9.md Merge pull request #59464 from dixudx/fix_all_typos 2018-02-10 22:12:45 -08:00
CHANGELOG-1.10.md Merge pull request #59250 from thedrow/patch-1 2018-02-20 20:00:38 -08:00
CHANGELOG.md
code-of-conduct.md
CONTRIBUTING.md
labels.yaml
LICENSE
Makefile
Makefile.generated_files
OWNERS
OWNERS_ALIASES Merge pull request #59977 from ravisantoshgudimetla/add-to-maintainers 2018-02-21 15:40:38 -08:00
README.md Update README.md 2018-02-11 04:34:01 +00:00
SUPPORT.md
WORKSPACE

Kubernetes

Submit Queue Widget GoDoc Widget CII Best Practices


Kubernetes is an open source system for managing containerized applications across multiple hosts; providing basic mechanisms for deployment, maintenance, and scaling of applications.

Kubernetes builds upon a decade and a half of experience at Google running production workloads at scale using a system called Borg, combined with best-of-breed ideas and practices from the community.

Kubernetes is hosted by the Cloud Native Computing Foundation (CNCF). If you are a company that wants to help shape the evolution of technologies that are container-packaged, dynamically-scheduled and microservices-oriented, consider joining the CNCF. For details about who's involved and how Kubernetes plays a role, read the CNCF announcement.


To start using Kubernetes

See our documentation on kubernetes.io.

Try our interactive tutorial.

Take a free course on Scalable Microservices with Kubernetes.

To start developing Kubernetes

The community repository hosts all information about building Kubernetes from source, how to contribute code and documentation, who to contact about what, etc.

If you want to build Kubernetes right away there are two options:

You have a working Go environment.
$ go get -d k8s.io/kubernetes
$ cd $GOPATH/src/k8s.io/kubernetes
$ make
You have a working Docker environment.
$ git clone https://github.com/kubernetes/kubernetes
$ cd kubernetes
$ make quick-release

For the full story, head over to the developer's documentation.

Support

If you need support, start with the troubleshooting guide, and work your way through the process that we've outlined.

That said, if you have questions, reach out to us one way or another.

Analytics