NO_PROXY-compatibiliteit tussen curl, .NET en containers
Zet een gedeeld beleid voor directe routing om in clientspecifieke configuratie met een kleine set representatieve bestemmingen.
Een team zet één bypass-string in een gedeeld omgevingsbestand. curl gaat rechtstreeks, een andere toepassing gebruikt de proxy en een container gedraagt zich weer anders. Het gedeelde bestand verdeelde dezelfde tekens. Het verdeelde geen gedeelde parser.
Het duurzame object is het beleid: welke bestemmingen moeten direct zijn, onder welke voorwaarden? Houd dat gescheiden van de string die elk programma nodig heeft.
Schrijf eerst de verwachte routes op
Gebruik representatieve adressen, inclusief grensvallen en niet alleen eenvoudige successen:
| Vorm van de bestemming | Vraag voor de beleidseigenaar |
|---|---|
| Bovenliggend domein | Moet het worden omzeild, of alleen de kinderen? |
| Een subdomein | Erft het dezelfde route? |
| Een letterlijk privé-IP | Is dat adres rechtstreeks bereikbaar vanaf deze client? |
| Dezelfde dienst onder een hostnaam | Moeten naamgebaseerde en adresgebaseerde verzoeken overeenkomen? |
| Een andere dienstpoort | Dekt de uitzondering de host of één listener? |
Identificeer vervolgens de consumenten: de daemon die een image ophaalt, het programma in de container, een HTTP-bibliotheek van een taal en een interactieve browser kunnen allemaal afzonderlijke vermeldingen zijn. Een proxyconfiguratie van een Docker-client kan de omgevingswaarden van de container vullen zonder dat elke client binnenin dezelfde matchingregels moet implementeren.
Vertaal in plaats van blind te kopiëren
Een gedocumenteerd voorbeeld van een echt verschil is de grens van het bovenliggende domein. De domeinuitzondering van curl omvat het genoemde domein en overeenkomende kinderen. Het omgevingsbeleid van .NET onderscheidt de kale naam van de subdomeinvorm met een voorloop punt. Een universele regel om „altijd een voorloop punt toe te voegen“ kan beide beleidsregels niet betrouwbaar uitdrukken.
Ondersteuning voor IP-reeksen hangt ook af van de consument en de versie ervan. Een machine met een nieuwe zelfstandige curl kan nog steeds een toepassing draaien die aan een oudere libcurl is gekoppeld, of een client die een heel andere bibliotheek gebruikt. De release van het besturingssysteem is geen volledige clientinventaris.
Leg voor elke consument de ondersteunde configuratie-interface vast en de kleinste uitdrukking van de beoogde routes. Een korte expliciete hostlijst kan beter zijn dan een slim patroon waarvan niemand de betekenis kan uitleggen.
Houd configuratiebewijs gescheiden van verbindingsbewijs
Een geparseerde instelling of een routeringsbeslissings-API kan laten zien wat het programma heeft gekozen. Een verzoekresultaat laat vervolgens zien of die route bruikbaar was. In .NET levert HttpClient.DefaultProxy.IsBypassed die controle aan de configuratiekant wanneer de standaardproxy het gebruikte beleid is. Diagnosticeer een onbereikbare directe dienst niet als een fout van de bypass-parser alleen omdat het verzoek een time-out kreeg.
Behoud de grensbestemmingen bij het bijwerken van een client of een basisimage. Ze maken toekomstige compatibiliteitswijzigingen zichtbaar zonder dat het hele team opnieuw hoeft te ontdekken waarom het bestand twee vergelijkbare domeinvermeldingen bevat.