"By default, to distribute traffic to instances, the Session Affinity is set to NONE. Google Cloud Load Balancing picks an instance based on a hash of the source IP and port, destination IP and port, and protocol. This means that incoming TCP connections are spread across instances and each new connection may go to a different instance. All packets for a connection are directed to the same instance until the connection is closed. Established connections are not taken into account when balancing.
Regardless of the session affinity setting, all packets for a connection are directed to the chosen instance until the connection is closed and have no impact on load balancing decisions for new incoming connections. This can result in imbalance between backends if long-lived TCP connections are in use.
You can choose a different Session Affinity setting if you need multiple connections from a client to go to the same instance. See sessionAffinity in the Target Pools documentation for more information."
"In any of these proxy model, any traffic bound for the Service's IP:Port is proxied to an appropriate backend without the clients knowing anything about Kubernetes or Services or Pods. Client-IP based session affinity can be selected by setting service.spec.sessionAffinity to "ClientIP" (the default is "None"), and you can set the max session sticky time by setting the field service.spec.sessionAffinityConfig.clientIP.timeoutSeconds if you have already set service.spec.sessionAffinity to "ClientIP" (the default is "10800")."
Deployment Manager is an infrastructure deployment service that automates the creation and management of Google Cloud Platform resources for you.
Write flexible template and configuration files and use them to create deployments that have a variety of Cloud Platform services, such as Google Cloud Storage, Google Compute Engine, and Google Cloud SQL, configured to work together.
Created a role bigtable.some_name , few weeks later that bigtable prefix became reserved name
Created service accouunt manually, later created account and assigned role using deployment manager. Older role was also assigned and was acting like the old one. Unassigned and assigned correct role and started working.
Was hard to find correct api resource for IAM. Cloud Resource Manager was the answer.
Terraform
Roles, IAM, ServiceAccounts, BigTable done with Terraform
provider"google"{project="project-name"}### Big Tableresource"google_bigtable_instance""bigtable-name"{name="bigtable-name"cluster_id="bigtable-name-cluster"zone="europe-west1-b"num_nodes=3storage_type="SSD"}### Custom roleresource"google_project_iam_custom_role""app-bigtable-role"{role_id="bigtable.app"title="App BigTable Role"description="Role for managing BigTable"permissions= ["bigtable.tables.create","bigtable.tables.update","bigtable.tables.checkConsistency","bigtable.tables.generateConsistencyToken","bigtable.tables.get","bigtable.tables.list","bigtable.tables.mutateRows","bigtable.tables.readRows","bigtable.tables.sampleRowKeys","bigtable.appProfiles.get","bigtable.appProfiles.list","bigtable.clusters.get","bigtable.clusters.list","monitoring.metricDescriptors.get","monitoring.metricDescriptors.list","monitoring.timeSeries.list","resourcemanager.projects.get",]}### service accountresource"google_service_account""app-bigtable-sa-prod"{account_id="app-prod"display_name="serviceAccount-app-prod"}### service accountresource"google_service_account""app-bigtable-sa-prod-reader"{account_id="app-prod-reader"display_name="serviceAccount-app-prod-reader"}### assigned custom roleresource"google_project_iam_binding""app-prod-role"{role="projects/project-name/roles/bigtable.app"members= ["serviceAccount:app-prod@project-name.iam.gserviceaccount.com"]}### assigned predefined BigTable roleresource"google_project_iam_binding""app-prod-role-reader"{role="roles/bigtable.reader"members= ["serviceAccount:app-prod-reader@project-name.iam.gserviceaccount.com"]}