kubernetes_service

A Service is an abstraction which defines a logical set of pods and a policy by which to access them - sometimes called a micro-service.

Example Usage

resource "kubernetes_service" "example" {
  metadata {
    name = "terraform-example"
  }
  spec {
    selector {
      app = "${kubernetes_pod.example.metadata.0.labels.app}"
    }
    session_affinity = "ClientIP"
    port {
      port = 8080
      target_port = 80
    }

    type = "LoadBalancer"
  }
}

resource "kubernetes_pod" "example" {
  metadata {
    name = "terraform-example"
    labels {
      app = "MyApp"
    }
  }

  spec {
    container {
      image = "nginx:1.7.9"
      name  = "example"
    }
  }
}

Argument Reference

The following arguments are supported:

Nested Blocks

metadata

Arguments

Attributes

spec

Arguments

  • cluster_ip - (Optional) The IP address of the service. It is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. None can be specified for headless services when proxying is not required. Ignored if type is ExternalName. More info: http://kubernetes.io/docs/user-guide/services#virtual-ips-and-service-proxies
  • external_ips - (Optional) A list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system.
  • external_name - (Optional) The external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid DNS name and requires type to be ExternalName.
  • load_balancer_ip - (Optional) Only applies to type = LoadBalancer. LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying this field when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.
  • load_balancer_source_ranges - (Optional) If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature. More info: http://kubernetes.io/docs/user-guide/services-firewalls
  • port - (Required) The list of ports that are exposed by this service. More info: http://kubernetes.io/docs/user-guide/services#virtual-ips-and-service-proxies
  • selector - (Optional) Route service traffic to pods with label keys and values matching this selector. Only applies to types ClusterIP, NodePort, and LoadBalancer. More info: http://kubernetes.io/docs/user-guide/services#overview
  • session_affinity - (Optional) Used to maintain session affinity. Supports ClientIP and None. Defaults to None. More info: http://kubernetes.io/docs/user-guide/services#virtual-ips-and-service-proxies
  • type - (Optional) Determines how the service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. ExternalName maps to the specified external_name. More info: http://kubernetes.io/docs/user-guide/services#overview

port

Arguments

  • name - (Optional) The name of this port within the service. All ports within the service must have unique names. Optional if only one ServicePort is defined on this service.
  • node_port - (Optional) The port on each node on which this service is exposed when type is NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the type of this service requires one. More info: http://kubernetes.io/docs/user-guide/services#type--nodeport
  • port - (Required) The port that will be exposed by this service.
  • protocol - (Optional) The IP protocol for this port. Supports TCP and UDP. Default is TCP.
  • target_port - (Required) Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. This field is ignored for services with cluster_ip = "None". More info: http://kubernetes.io/docs/user-guide/services#defining-a-service

Attributes

  • load_balancer_ingress - A list containing ingress points for the load-balancer (only valid if type = "LoadBalancer")

load_balancer_ingress

Attributes

  • ip - IP which is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)
  • hostname - Hostname which is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)

Import

Service can be imported using its namespace and name, e.g.

$ terraform import kubernetes_service.example default/terraform-name

© 2018 HashiCorp
Licensed under the MPL 2.0 License.
https://www.terraform.io/docs/providers/kubernetes/r/service.html