}) By("waiting for Ingress to come up with ip: " + ip) httpClient := buildInsecureClient(reqTimeout) framework.ExpectNoError(framework.PollURL(fmt.Sprintf("https://%v/", ip), "", framework.LoadBalancerPollTimeout, jig.pollInterval, httpClient, false)) By("should reject HTTP traffic") framework.ExpectNoError(framework.PollURL(fmt.Sprintf("http://%v/", ip), "", framework.LoadBalancerPollTimeout, jig.pollInterval, httpClient, true)) By("should have correct firewall rule for ingress") fw := gceController.getFirewallRule() expFw := jig.constructFirewallForIngress(gceController) // Passed the last argument as `true` to verify the backend ports is a subset // of the allowed ports in firewall rule, given there may be other existing // ingress resources and backends we are not aware of. Expect(framework.VerifyFirewallRule(fw, expFw, gceController.cloud.Network, true)).NotTo(HaveOccurred()) // TODO: uncomment the restart test once we have a way to synchronize // and know that the controller has resumed watching. If we delete // the ingress before the controller is ready we will leak. // By("restaring glbc") // restarter := NewRestartConfig( // framework.GetMasterHost(), "glbc", glbcHealthzPort, restartPollInterval, restartTimeout) // restarter.restart() // By("should continue serving on provided static-ip for 30 seconds") // ExpectNoError(jig.verifyURL(fmt.Sprintf("https://%v/", ip), "", 30, 1*time.Second, httpClient)) }) // TODO: Implement a multizone e2e that verifies traffic reaches each // zone based on pod labels. })
}) defer func() { jig.UpdateServiceOrFail(svc.Namespace, svc.Name, func(svc *v1.Service) { svc.Spec.Type = v1.ServiceTypeNodePort svc.Spec.LoadBalancerSourceRanges = nil }) Expect(cs.Core().Services(svc.Namespace).Delete(svc.Name, nil)).NotTo(HaveOccurred()) }() svcExternalIP := svc.Status.LoadBalancer.Ingress[0].IP By("Checking if service's firewall rules are correct") nodeTags := framework.GetInstanceTags(cloudConfig, nodesNames[0]) expFw := framework.ConstructFirewallForLBService(svc, nodeTags.Items) fw, err := gceCloud.GetFirewall(expFw.Name) Expect(err).NotTo(HaveOccurred()) Expect(framework.VerifyFirewallRule(fw, expFw, cloudConfig.Network, false)).NotTo(HaveOccurred()) By(fmt.Sprintf("Creating netexec pods on at most %v nodes", maxNodesForEndpointsTests)) for i, nodeName := range nodesNames { podName := fmt.Sprintf("netexec%v", i) jig.LaunchNetexecPodOnNode(f, nodeName, podName, firewallTestHttpPort, firewallTestUdpPort, true) defer func() { framework.Logf("Cleaning up the netexec pod: %v", podName) Expect(cs.Core().Pods(ns).Delete(podName, nil)).NotTo(HaveOccurred()) }() } // Send requests from outside of the cluster because internal traffic is whitelisted By("Accessing the external service ip from outside, all non-master nodes should be reached") Expect(testHitNodesFromOutside(svcExternalIP, firewallTestHttpPort, firewallTimeoutDefault, nodesSet)).NotTo(HaveOccurred())