Skip to content

Conversation

@bzub
Copy link
Contributor

@bzub bzub commented Sep 13, 2017

Fixes #159

@bzub bzub added the bug label Sep 13, 2017
@bzub
Copy link
Contributor Author

bzub commented Sep 14, 2017

Testing Steps

e2e

passed

custom tests

Create service + http endpoints

kubectl run ipvs --command --image alpine --replicas 10 --expose --port 80 -- httpd -fv

Log snippets:

kube-router-6cs68:kube-router I0914 02:05:51.791244       1 network_services_controller.go:203] Received service update from watch API
kube-router-6cs68:kube-router I0914 02:05:51.791789       1 network_services_controller.go:796] Successfully added service: TCP:10.3.0.42:80 (Flags: )
kube-router-6cs68:kube-router I0914 02:05:51.791806       1 network_services_controller.go:313] Cleaning up if any, old ipvs service and servers which are no longer needed
kube-router-6cs68:kube-router I0914 02:05:51.791917       1 network_services_controller.go:361] IPVS servers and services are synced to desired state!!
kube-router-6cs68:kube-router I0914 02:05:51.791925       1 network_services_controller.go:225] sync ipvs servers took 637.532µs
kube-router-6cs68:kube-router I0914 02:05:52.169283       1 network_services_controller.go:181] Received endpoints update from watch API
kube-router-6cs68:kube-router I0914 02:05:52.169321       1 network_services_controller.go:193] Skipping ipvs server sync on endpoints update because nothing changed
kube-router-6cs68:kube-router I0914 02:05:52.260199       1 network_services_controller.go:181] Received endpoints update from watch API
kube-router-6cs68:kube-router I0914 02:05:52.260383       1 network_services_controller.go:193] Skipping ipvs server sync on endpoints update because nothing changed
kube-router-6cs68:kube-router I0914 02:05:56.892266       1 network_services_controller.go:181] Received endpoints update from watch API
kube-router-6cs68:kube-router I0914 02:05:56.893047       1 network_services_controller.go:804] Successfully added destination 10.2.1.22:80 (Weight: 1) to the service TCP:10.3.0.42:80 (Flags: [hashed entry])
kube-router-6cs68:kube-router I0914 02:05:56.893071       1 network_services_controller.go:313] Cleaning up if any, old ipvs service and servers which are no longer needed
kube-router-6cs68:kube-router I0914 02:05:56.893289       1 network_services_controller.go:361] IPVS servers and services are synced to desired state!!
kube-router-6cs68:kube-router I0914 02:05:56.893304       1 network_services_controller.go:225] sync ipvs servers took 982.897µs

Edited ipvs service with ClientIP session affinity

Log snippets:

kube-router-6cs68:kube-router I0914 02:06:38.113296       1 network_services_controller.go:203] Received service update from watch API
kube-router-6cs68:kube-router I0914 02:06:38.113712       1 network_services_controller.go:771] Updated persistence/session-affinity for service: TCP:10.3.0.42:80 (Flags: [persistent port][hashed entry])
kube-router-6cs68:kube-router I0914 02:06:38.114061       1 network_services_controller.go:313] Cleaning up if any, old ipvs service and servers which are no longer needed
kube-router-6cs68:kube-router I0914 02:06:38.114261       1 network_services_controller.go:361] IPVS servers and services are synced to desired state!!
kube-router-6cs68:kube-router I0914 02:06:38.114273       1 network_services_controller.go:225] sync ipvs servers took 898.11µs

ipvsadm status:

for i in $(kk get pods -l k8s-app=kube-router --output name)
do
kk exec $(basename ${i}) -- ipvsadm -ln
done
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.3.0.1:443 rr persistent 10800
  -> 172.17.4.101:443             Masq    1      0          0         
TCP  10.3.0.10:53 rr
  -> 10.2.0.3:53                  Masq    1      0          0         
TCP  10.3.0.42:80 rr persistent 10800
  -> 10.2.1.22:80                 Masq    1      0          0         
  -> 10.2.1.23:80                 Masq    1      0          0         
  -> 10.2.1.24:80                 Masq    1      0          0         
  -> 10.2.1.25:80                 Masq    1      0          0         
  -> 10.2.1.26:80                 Masq    1      0          0         
  -> 10.2.1.27:80                 Masq    1      0          0         
  -> 10.2.1.28:80                 Masq    1      0          0         
  -> 10.2.1.29:80                 Masq    1      0          0         
  -> 10.2.1.30:80                 Masq    1      0          0         
  -> 10.2.1.31:80                 Masq    1      0          0         
UDP  10.3.0.10:53 rr
  -> 10.2.0.3:53                  Masq    1      0          0         
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.3.0.1:443 rr persistent 10800
  -> 172.17.4.101:443             Masq    1      5          0         
TCP  10.3.0.10:53 rr
  -> 10.2.0.3:53                  Masq    1      0          0         
TCP  10.3.0.42:80 rr persistent 10800
  -> 10.2.1.22:80                 Masq    1      0          0         
  -> 10.2.1.23:80                 Masq    1      0          0         
  -> 10.2.1.24:80                 Masq    1      0          0         
  -> 10.2.1.25:80                 Masq    1      0          0         
  -> 10.2.1.26:80                 Masq    1      0          0         
  -> 10.2.1.27:80                 Masq    1      0          0         
  -> 10.2.1.28:80                 Masq    1      0          0         
  -> 10.2.1.29:80                 Masq    1      0          0         
  -> 10.2.1.30:80                 Masq    1      0          0         
  -> 10.2.1.31:80                 Masq    1      0          0         
UDP  10.3.0.10:53 rr
  -> 10.2.0.3:53

Testing connections to endpoints through ipvs service:

kubectl run client --command --image alpine -- sh -c 'while true; do wget ipvs; done'

ipvsadm shows all connections from one client remain on one endpoint.

do
kk exec $(basename ${i}) -- ipvsadm -ln --stats
done
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  10.3.0.1:443                        0        0        0        0        0
  -> 172.17.4.101:443                    0        0        0        0        0
TCP  10.3.0.10:53                        0        0        0        0        0
  -> 10.2.0.3:53                         0        0        0        0        0
TCP  10.3.0.42:80                    14209   111769    74613  7207174  8334358
  -> 10.2.1.22:80                        2       12        8      774      894
  -> 10.2.1.23:80                        2       12        8      774      894
  -> 10.2.1.24:80                        2       12        8      774      894
  -> 10.2.1.25:80                        3       18       12     1161     1341
  -> 10.2.1.26:80                        3       18       12     1161     1341
  -> 10.2.1.27:80                        3       18       12     1161     1341
  -> 10.2.1.28:80                        3       18       12     1161     1341
  -> 10.2.1.29:80                        3       18       12     1161     1341
  -> 10.2.1.30:80                    14185   111625    74517  7197886  8323630
  -> 10.2.1.31:80                        3       18       12     1161     1341
UDP  10.3.0.10:53                    13640    37277    37276  2833052  3131346
  -> 10.2.0.3:53                     13640    37277    37276  2833052  3131346
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  10.3.0.1:443                      481    36350    36499  4188520 16051448
  -> 172.17.4.101:443                  481    36350    36499  4188520 16051448
TCP  10.3.0.10:53                        0        0        0        0        0
  -> 10.2.0.3:53                         0        0        0        0        0
TCP  10.3.0.42:80                        0        0        0        0        0
  -> 10.2.1.22:80                        0        0        0        0        0
  -> 10.2.1.23:80                        0        0        0        0        0
  -> 10.2.1.24:80                        0        0        0        0        0
  -> 10.2.1.25:80                        0        0        0        0        0
  -> 10.2.1.26:80                        0        0        0        0        0
  -> 10.2.1.27:80                        0        0        0        0        0
  -> 10.2.1.28:80                        0        0        0        0        0
  -> 10.2.1.29:80                        0        0        0        0        0
  -> 10.2.1.30:80                        0        0        0        0        0
  -> 10.2.1.31:80                        0        0        0        0        0
UDP  10.3.0.10:53                        0        0        0        0        0
  -> 10.2.0.3:53                         0        0        0        0        0

@bzub bzub merged commit d433fa5 into master Sep 14, 2017
@bzub bzub mentioned this pull request Sep 14, 2017
@bzub bzub deleted the 159-fix-session-affinity branch September 16, 2017 15:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants