| 
									
										
										
										
											2017-08-09 03:13:38 -07:00
										 |  |  | # autopath
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-04 12:53:07 +00:00
										 |  |  | ## Name
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-10 23:32:06 -08:00
										 |  |  | *autopath* - allows for server-side search path completion. | 
					
						
							| 
									
										
										
										
											2018-01-04 12:53:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## Description
 | 
					
						
							| 
									
										
										
										
											2017-08-09 03:13:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-16 14:28:44 +02:00
										 |  |  | If the *autopath* plugin sees a query that matches the first element of the configured search path, it will | 
					
						
							| 
									
										
										
										
											2018-01-10 23:32:06 -08:00
										 |  |  | follow the chain of search path elements and return the first reply that is not NXDOMAIN. On any | 
					
						
							|  |  |  | failures, the original reply is returned. Because *autopath* returns a reply for a name that wasn't | 
					
						
							| 
									
										
										
										
											2020-10-16 14:28:44 +02:00
										 |  |  | the original question, it will add a CNAME that points from the original name (with the search path | 
					
						
							| 
									
										
										
										
											2017-09-15 22:27:55 +01:00
										 |  |  | element in it) to the name of this answer. | 
					
						
							| 
									
										
										
										
											2017-08-09 03:13:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-16 14:28:44 +02:00
										 |  |  | **Note**: There are several known issues, see the "Bugs" section below. | 
					
						
							| 
									
										
										
										
											2020-03-26 03:42:32 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-09 03:13:38 -07:00
										 |  |  | ## Syntax
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ~~~ | 
					
						
							| 
									
										
										
										
											2017-10-10 09:39:35 +02:00
										 |  |  | autopath [ZONE...] RESOLV-CONF | 
					
						
							| 
									
										
										
										
											2017-08-09 03:13:38 -07:00
										 |  |  | ~~~ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * **ZONES** zones *autopath* should be authoritative for. | 
					
						
							|  |  |  | * **RESOLV-CONF** points to a `resolv.conf` like file or uses a special syntax to point to another | 
					
						
							| 
									
										
										
										
											2017-09-14 09:36:06 +01:00
										 |  |  |   plugin. For instance `@kubernetes`, will call out to the kubernetes plugin (for each | 
					
						
							| 
									
										
										
										
											2017-08-09 03:13:38 -07:00
										 |  |  |   query) to retrieve the search list it should use. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-16 14:28:44 +02:00
										 |  |  | If a plugin implements the `AutoPather` interface then it can be used by *autopath*. | 
					
						
							| 
									
										
										
										
											2017-08-09 03:13:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-15 19:39:24 +02:00
										 |  |  | ## Metrics
 | 
					
						
							| 
									
										
										
										
											2017-12-12 15:40:30 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-08 10:20:48 +01:00
										 |  |  | If monitoring is enabled (via the *prometheus* plugin) then the following metric is exported: | 
					
						
							| 
									
										
										
										
											2017-12-12 15:40:30 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-26 09:17:33 +01:00
										 |  |  | * `coredns_autopath_success_total{server}` - counter of successfully autopath-ed queries. | 
					
						
							| 
									
										
										
										
											2018-04-25 16:43:57 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | The `server` label is explained in the *metrics* plugin documentation. | 
					
						
							| 
									
										
										
										
											2017-10-15 19:39:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-09 03:13:38 -07:00
										 |  |  | ## Examples
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ~~~ | 
					
						
							|  |  |  | autopath my-resolv.conf | 
					
						
							|  |  |  | ~~~ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-28 15:17:54 -04:00
										 |  |  | Use `my-resolv.conf` as the file to get the search path from. This file only needs to have one line: | 
					
						
							| 
									
										
										
										
											2017-08-09 03:13:38 -07:00
										 |  |  | `search domain1 domain2 ...` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ~~~ | 
					
						
							|  |  |  | autopath @kubernetes | 
					
						
							|  |  |  | ~~~ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-10 23:32:06 -08:00
										 |  |  | Use the search path dynamically retrieved from the *kubernetes* plugin. | 
					
						
							| 
									
										
										
										
											2018-10-18 17:42:53 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-16 14:28:44 +02:00
										 |  |  | ## Bugs
 | 
					
						
							| 
									
										
										
										
											2018-10-18 17:42:53 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-16 14:28:44 +02:00
										 |  |  | In Kubernetes, *autopath* can derive the wrong namespace of a client Pod (and therefore wrong search | 
					
						
							|  |  |  | path) in the following case. To properly build the search path of a client *autopath* needs to know | 
					
						
							|  |  |  | the namespace of the a Pod making a DNS request. To do this, it relies on the *kubernetes* plugin's | 
					
						
							|  |  |  | Pod cache to resolve the client's IP address to a Pod. The Pod cache is maintained by an API watch | 
					
						
							|  |  |  | on Pods. When Pod IP assignments change, the Kubernetes API notifies CoreDNS via the API watch. | 
					
						
							| 
									
										
										
										
											2020-03-26 03:42:32 -04:00
										 |  |  | However, that notification is not instantaneous. In the case that a Pod is deleted, and it's IP is | 
					
						
							| 
									
										
										
										
											2020-10-16 14:28:44 +02:00
										 |  |  | immediately provisioned to a Pod in another namespace, and that new Pod make a DNS lookup *before* | 
					
						
							|  |  |  | the API watch can notify CoreDNS of the change, *autopath* will resolve the IP to the previous Pod's | 
					
						
							|  |  |  | namespace. | 
					
						
							| 
									
										
										
										
											2020-03-26 03:42:32 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | In Kubernetes, *autopath* is not compatible with Pods running from Windows nodes. | 
					
						
							| 
									
										
										
										
											2019-04-01 10:38:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-16 14:28:44 +02:00
										 |  |  | If the server side search ultimately results in a negative answer (e.g. `NXDOMAIN`), then the client | 
					
						
							|  |  |  | will fruitlessly search all paths manually, thus negating the *autopath* optimization. |