Add client cert to support mTLS
[it/test.git] / XTesting / kubespray / docs / openstack.md
1
2 # OpenStack
3
4 ## Known compatible public clouds
5
6 Kubespray has been tested on a number of OpenStack Public Clouds including (in alphabetical order):
7
8 - [Auro](https://auro.io/)
9 - [Betacloud](https://www.betacloud.io/)
10 - [CityCloud](https://www.citycloud.com/)
11 - [DreamHost](https://www.dreamhost.com/cloud/computing/)
12 - [ELASTX](https://elastx.se/)
13 - [EnterCloudSuite](https://www.entercloudsuite.com/)
14 - [FugaCloud](https://fuga.cloud/)
15 - [Infomaniak](https://infomaniak.com)
16 - [Open Telekom Cloud](https://cloud.telekom.de/) : requires to set the variable `wait_for_floatingip = "true"` in your cluster.tfvars
17 - [OVHcloud](https://www.ovhcloud.com/)
18 - [Rackspace](https://www.rackspace.com/)
19 - [Ultimum](https://ultimum.io/)
20 - [VexxHost](https://vexxhost.com/)
21 - [Zetta](https://www.zetta.io/)
22
23 ## The in-tree cloud provider
24
25 To deploy Kubespray on [OpenStack](https://www.openstack.org/) uncomment the `cloud_provider` option in `group_vars/all/all.yml` and set it to `openstack`.
26
27 After that make sure to source in your OpenStack credentials like you would do when using `nova-client` or `neutron-client` by using `source path/to/your/openstack-rc` or `. path/to/your/openstack-rc`.
28
29 For those who prefer to pass the OpenStack CA certificate as a string, one can
30 base64 encode the cacert file and store it in the variable `openstack_cacert`.
31
32 The next step is to make sure the hostnames in your `inventory` file are identical to your instance names in OpenStack.
33 Otherwise [cinder](https://wiki.openstack.org/wiki/Cinder) won't work as expected.
34
35 Unless you are using calico or kube-router you can now run the playbook.
36
37 **Additional step needed when using calico or kube-router:**
38
39 Being L3 CNI, calico and kube-router do not encapsulate all packages with the hosts' ip addresses. Instead the packets will be routed with the PODs ip addresses directly.
40
41 OpenStack will filter and drop all packets from ips it does not know to prevent spoofing.
42
43 In order to make L3 CNIs work on OpenStack you will need to tell OpenStack to allow pods packets by allowing the network they use.
44
45 First you will need the ids of your OpenStack instances that will run kubernetes:
46
47   ```bash
48   openstack server list --project YOUR_PROJECT
49   +--------------------------------------+--------+----------------------------------+--------+-------------+
50   | ID                                   | Name   | Tenant ID                        | Status | Power State |
51   +--------------------------------------+--------+----------------------------------+--------+-------------+
52   | e1f48aad-df96-4bce-bf61-62ae12bf3f95 | k8s-1  | fba478440cb2444a9e5cf03717eb5d6f | ACTIVE | Running     |
53   | 725cd548-6ea3-426b-baaa-e7306d3c8052 | k8s-2  | fba478440cb2444a9e5cf03717eb5d6f | ACTIVE | Running     |
54   ```
55
56 Then you can use the instance ids to find the connected [neutron](https://wiki.openstack.org/wiki/Neutron) ports (though they are now configured through using OpenStack):
57
58   ```bash
59   openstack port list -c id -c device_id --project YOUR_PROJECT
60   +--------------------------------------+--------------------------------------+
61   | id                                   | device_id                            |
62   +--------------------------------------+--------------------------------------+
63   | 5662a4e0-e646-47f0-bf88-d80fbd2d99ef | e1f48aad-df96-4bce-bf61-62ae12bf3f95 |
64   | e5ae2045-a1e1-4e99-9aac-4353889449a7 | 725cd548-6ea3-426b-baaa-e7306d3c8052 |
65   ```
66
67 Given the port ids on the left, you can set the two `allowed-address`(es) in OpenStack. Note that you have to allow both `kube_service_addresses` (default `10.233.0.0/18`) and `kube_pods_subnet` (default `10.233.64.0/18`.)
68
69   ```bash
70   # allow kube_service_addresses and kube_pods_subnet network
71   openstack port set 5662a4e0-e646-47f0-bf88-d80fbd2d99ef --allowed-address ip-address=10.233.0.0/18 --allowed-address ip-address=10.233.64.0/18
72   openstack port set e5ae2045-a1e1-4e99-9aac-4353889449a7 --allowed-address ip-address=10.233.0.0/18 --allowed-address ip-address=10.233.64.0/18
73   ```
74
75 If all the VMs in the tenant correspond to Kubespray deployment, you can "sweep run" above with:
76
77   ```bash
78   openstack port list --device-owner=compute:nova -c ID -f value | xargs -tI@ openstack port set @ --allowed-address ip-address=10.233.0.0/18 --allowed-address ip-address=10.233.64.0/18
79   ```
80
81 Now you can finally run the playbook.
82
83 ## The external cloud provider
84
85 The in-tree cloud provider is deprecated and will be removed in a future version of Kubernetes. The target release for removing all remaining in-tree cloud providers is set to 1.21.
86
87 The new cloud provider is configured to have Octavia by default in Kubespray.
88
89 - Enable the new external cloud provider in `group_vars/all/all.yml`:
90
91   ```yaml
92   cloud_provider: external
93   external_cloud_provider: openstack
94   ```
95
96 - Enable Cinder CSI in `group_vars/all/openstack.yml`:
97
98   ```yaml
99   cinder_csi_enabled: true
100   ```
101
102 - Enable topology support (optional), if your openstack provider has custom Zone names you can override the default "nova" zone by setting the variable `cinder_topology_zones`
103
104   ```yaml
105   cinder_topology: true
106   ```
107
108 - Enabling `cinder_csi_ignore_volume_az: true`, ignores volumeAZ and schedules on any of the available node AZ.
109
110   ```yaml
111   cinder_csi_ignore_volume_az: true
112   ```
113
114 - If you are using OpenStack loadbalancer(s) replace the `openstack_lbaas_subnet_id` with the new `external_openstack_lbaas_subnet_id`. **Note** The new cloud provider is using Octavia instead of Neutron LBaaS by default!
115 - Enable 3 feature gates to allow migration of all volumes and storage classes (if you have any feature gates already set just add the 3 listed below):
116
117   ```yaml
118   kube_feature_gates:
119   - CSIMigration=true
120   - CSIMigrationOpenStack=true
121   - ExpandCSIVolumes=true
122   ```
123
124 - If you are in a case of a multi-nic OpenStack VMs (see [kubernetes/cloud-provider-openstack#407](https://github.com/kubernetes/cloud-provider-openstack/issues/407) and [#6083](https://github.com/kubernetes-sigs/kubespray/issues/6083) for explanation), you should override the default OpenStack networking configuration:
125
126   ```yaml
127   external_openstack_network_ipv6_disabled: false
128   external_openstack_network_internal_networks: []
129   external_openstack_network_public_networks: []
130   ```
131
132 - You can override the default OpenStack metadata configuration (see [#6338](https://github.com/kubernetes-sigs/kubespray/issues/6338) for explanation):
133
134   ```yaml
135   external_openstack_metadata_search_order: "configDrive,metadataService"
136   ```
137
138 - Available variables for configuring lbaas:
139
140   ```yaml
141   external_openstack_lbaas_create_monitor: false
142   external_openstack_lbaas_monitor_delay: "1m"
143   external_openstack_lbaas_monitor_timeout: "30s"
144   external_openstack_lbaas_monitor_max_retries: "3"
145   external_openstack_lbaas_provider: octavia
146   external_openstack_lbaas_use_octavia: false
147   external_openstack_lbaas_network_id: "Neutron network ID to create LBaaS VIP"
148   external_openstack_lbaas_subnet_id: "Neutron subnet ID to create LBaaS VIP"
149   external_openstack_lbaas_floating_network_id: "Neutron network ID to get floating IP from"
150   external_openstack_lbaas_floating_subnet_id: "Neutron subnet ID to get floating IP from"
151   external_openstack_lbaas_method: "ROUND_ROBIN"
152   external_openstack_lbaas_manage_security_groups: false
153   external_openstack_lbaas_internal_lb: false
154
155   ```
156
157 - Run `source path/to/your/openstack-rc` to read your OpenStack credentials like `OS_AUTH_URL`, `OS_USERNAME`, `OS_PASSWORD`, etc. Those variables are used for accessing OpenStack from the external cloud provider.
158 - Run the `cluster.yml` playbook