kube-proxy loadbalancing, need an external loadbalancer

This commit is contained in:
Smaine Kahlouch 2015-12-15 15:20:08 +01:00
parent 4055980ce6
commit 953f482585
5 changed files with 30 additions and 14 deletions

View file

@ -69,3 +69,18 @@ dns_domain: "{{ cluster_name }}"
# #
# # Ip address of the kubernetes dns service # # Ip address of the kubernetes dns service
dns_server: "{{ kube_service_addresses|ipaddr('net')|ipaddr(253)|ipaddr('address') }}" dns_server: "{{ kube_service_addresses|ipaddr('net')|ipaddr(253)|ipaddr('address') }}"
# For multi masters architecture:
# kube-proxy doesn't support multiple apiservers for the time being so you'll need to configure your own loadbalancer
# This domain name will be inserted into the /etc/hosts file of all servers
# configurationexample with haproxy :
# lissten kubernetes-apiserver-https
# bind 10.99.0.21:8383
# option ssl-hello-chk
# mode tcp
# timeout client 3h
# timeout server 3h
# server master1 10.99.0.26:443
# server master2 10.99.0.27:443
# balance roundrobin
apiserver_loadbalancer_domain_name: "lb-apiserver.kubernetes.local"

View file

@ -17,18 +17,10 @@
10.99.0.4 local_as=xxxxxxxx 10.99.0.4 local_as=xxxxxxxx
10.99.0.5 local_as=xxxxxxxx 10.99.0.5 local_as=xxxxxxxx
[usa] [new-york]
10.99.0.36 local_as=xxxxxxxx 10.99.0.36 local_as=xxxxxxxx
10.99.0.37 local_as=xxxxxxxx 10.99.0.37 local_as=xxxxxxxx
[k8s-cluster:children] [k8s-cluster:children]
kube-node kube-node
kube-master kube-master
[paris:vars]
peers=[{"router_id": "10.99.0.2", "as": "65xxx"}, {"router_id": "10.99.0.3", "as": "65xxx"}]
loadbalancer_address="10.99.0.24"
[usa:vars]
peers=[{"router_id": "10.99.0.34", "as": "65xxx"}, {"router_id": "10.99.0.35", "as": "65xxx"}]
loadbalancer_address="10.99.0.44"

View file

@ -8,6 +8,14 @@
when: hostvars[item].ansible_default_ipv4.address is defined when: hostvars[item].ansible_default_ipv4.address is defined
with_items: groups['all'] with_items: groups['all']
- name: populate kubernetes loadbalancer address into hosts file
lineinfile:
dest: /etc/hosts
regexp: ".*{{ apiserver_loadbalancer_domain_name }}$"
line: "{{ loadbalancer_apiserver.address }} lb-apiserver.kubernetes.local"
state: present
when: loadbalancer_apiserver is defined
- name: clean hosts file - name: clean hosts file
lineinfile: lineinfile:
dest: /etc/hosts dest: /etc/hosts

View file

@ -15,7 +15,11 @@ spec:
{% if inventory_hostname in groups['kube-master'] %} {% if inventory_hostname in groups['kube-master'] %}
- --master=http://127.0.0.1:8080 - --master=http://127.0.0.1:8080
{% else %} {% else %}
- --master=https://{{ groups['kube-master'][0] }}:{{kube_apiserver_port }} {% if loadbalancer_apiserver.address is defined | default('') %}
- --master=https://{{ apiserver_loadbalancer_domain_name }}:{{ loadbalancer_apiserver.port }}
{% else %}
- --master=https://{{ groups['kube-master'][0] }}:{{ kube_apiserver_port }}
{% endif%}
- --kubeconfig=/etc/kubernetes/node-kubeconfig.yaml - --kubeconfig=/etc/kubernetes/node-kubeconfig.yaml
{% endif %} {% endif %}
securityContext: securityContext:

View file

@ -10,12 +10,9 @@ subjectAltName = @alt_names
DNS.1 = kubernetes DNS.1 = kubernetes
DNS.2 = kubernetes.default DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc.{{ dns_domain }} DNS.3 = kubernetes.default.svc.{{ dns_domain }}
DNS.4 = {{ apiserver_loadbalancer_domain_name }}
{% for host in groups['kube-master'] %} {% for host in groups['kube-master'] %}
IP.{{ loop.index }} = {{ hostvars[host]['ip'] | default(hostvars[host]['ansible_default_ipv4']['address']) }} IP.{{ loop.index }} = {{ hostvars[host]['ip'] | default(hostvars[host]['ansible_default_ipv4']['address']) }}
{% endfor %} {% endfor %}
{% set idx = groups['kube-master'] | length | int + 1 %} {% set idx = groups['kube-master'] | length | int + 1 %}
IP.{{ idx | string }} = {{ kube_apiserver_ip }} IP.{{ idx | string }} = {{ kube_apiserver_ip }}
{% if loadbalancer_address is defined | default('') %}
{% set idx = idx | int + 1 %}
IP.{{ idx | string }} = {{ loadbalancer_address }}
{% endif %}