def add_endpoint(self, event): endpoint_data = event.metadata service_name = endpoint_data['metadata']['name'] namespace = endpoint_data['metadata']['namespace'] ips = endpoint_data.get('custom', {}).get('ips', []) vlog.dbg("received endpoint data %s" % (endpoint_data)) cache_key = "%s_%s" % (namespace, service_name) cached_service = self.service_cache.get(cache_key, {}) if cached_service: service_data = cached_service else: try: response_json = kubernetes.get_service( variables.K8S_API_SERVER, namespace, service_name) except exceptions.NotFound: vlog.dbg("No service found for endpoint %s " % service_name) return except Exception as e: vlog.err("add_endpoint: k8s get service (%s)" % (str(e))) return service_data = response_json service_type = service_data['spec'].get('type') if service_type != "ClusterIP" and service_type != "NodePort": return self._update_vip(service_data, ips)
def add_endpoint(self, event): endpoint_data = event.metadata service_name = endpoint_data['metadata']['name'] namespace = endpoint_data['metadata']['namespace'] ips = endpoint_data.get('custom', {}).get('ips', []) vlog.dbg("received endpoint data %s" % (endpoint_data)) cache_key = "%s_%s" % (namespace, service_name) cached_service = self.service_cache.get(cache_key, {}) if cached_service: service_data = cached_service else: try: response_json = kubernetes.get_service( variables.K8S_API_SERVER, namespace, service_name) except exceptions.NotFound: vlog.dbg("No service found for endpoint %s " % service_name) return except Exception as e: vlog.err("add_endpoint: k8s get service (%s)" % (str(e))) return service_data = response_json service_type = service_data['spec'].get('type') if service_type != "ClusterIP" and service_type != "NodePort": return self._update_vip(service_data, ips)
def add_endpoint(self, event): # TODO: Special handling for nodeport. endpoint_data = event.metadata service_name = endpoint_data['metadata']['name'] namespace = endpoint_data['metadata']['namespace'] vlog.dbg("received endpoint data %s" % (endpoint_data)) ips = [] for subset in endpoint_data['subsets']: for address in subset['addresses']: ip = address.get('ip') if ip: ips.append(ip) cache_key = "%s_%s" % (namespace, service_name) cached_service = self.service_cache.get(cache_key, {}) if cached_service: service_data = cached_service else: try: response_json = kubernetes.get_service( variables.K8S_API_SERVER, namespace, service_name) except Exception as e: vlog.err("add_endpoint: k8s get service (%s)" % (str(e))) return service_data = response_json service_type = service_data['spec'].get('type') if service_type != "ClusterIP" and service_type != "NodePort": return service_ip = service_data['spec'].get('clusterIP') if not service_ip: return service_ports = service_data['spec'].get('ports') if not service_ports: return physical_gateway_ips = self._get_physical_gateway_ips() for service_port in service_ports: if service_type == "NodePort": port = service_port.get('nodePort') else: port = service_port.get('port') if not port: continue protocol = service_port.get('protocol') if not protocol: protocol = "TCP" target_port = service_port.get('targetPort') if not target_port: target_port = port if service_type == "NodePort": for gateway_ip in physical_gateway_ips: self._create_load_balancer_vip(service_type, gateway_ip, ips, port, target_port, protocol) else: self._create_load_balancer_vip(service_type, service_ip, ips, port, target_port, protocol)