рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рд▓рд╛рдВрдЧ рдбреАрдПрдирдПрд╕ рд╕рдВрдХрд▓реНрдк

рдпрд╣ рдЖрд▓реЗрдЦ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ DNS рдореБрджреНрджреЛрдВ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ рдЬреЛ рд╣рдорд╛рд░реА рдЯреАрдо рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдХрднреА-рдХрднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╢реБрд░реВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЧрд╣рд░реА рд╣реИред


рдкрд░рд┐рдЪрдп


рд╣рдореЗрд╢рд╛ рдПрдХ рдХреНрд╖рдг рдЖрддрд╛ рд╣реИ рдЬрдм рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рдмрдЧ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддреА рд╣реИрдВ, рд╣рдореЗрдВ рдХреБрдЫ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддреА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реА рдЫреЛрдЯреА рдЯреАрдо рдХреЛ рд╕рднреА рдкреНрд░рдпреБрдХреНрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХрдИ рдХрд╛рд░рдг рдереЗ, рдЙрджреНрджреЗрд╢реНрдп рдФрд░ рдмрд╣реБрдд рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХрд╣рд╛рдиреА, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред


рдЪреВрдВрдХрд┐ рдХрд┐рд╕реА рдиреЗ рдкрд╣рд▓реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдХрдИ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛ред рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЪреМрдереЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рдмрд╛рдж, рдЬрдм рд╕рднреА рдореБрдЦреНрдп рд╢рдВрдХреБ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рднрд░реЗ рд╣реБрдП рд╣реИрдВ, рд╕рднреА рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рднреА рддреИрдирд╛рддреА рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рдЖрдк рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред


11 рдШрдВрдЯреЗ, рдХрд╛рд░реНрдп рджрд┐рд╡рд╕ рдХреА рд╢реБрд░реБрдЖрддред рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рднрд╛рдЧ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИред


рдирд┐рджрд╛рди


рдЖрд╡реЗрджрди рдХреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╢рд╛рдорд┐рд▓ рдерд╛, рдЬреЛ рд╣рд░ рдХреБрдЫ рдорд┐рдирдЯ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЪрдврд╝ рдЬрд╛рддрд╛ рдерд╛, рдЗрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪрддрд╛ рдерд╛ рдФрд░ рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рддреЛ рдмрд╕ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ред рдкрд░реАрдХреНрд╖рдг рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдЗрд╕рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЧ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦрддрд╛ рд╣реИред рдХреЛрдИ рд╕рдорд╛рдирддрд╛ рдирд╣реАрдВ, рдХреЛрдИ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдирд╣реАрдВ, рдПрдХрдорд╛рддреНрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рдЪреВрд▓реНрд╣рд╛ред


рдХрд░реАрдм рд╕реЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рд▓реЙрдЧ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд▓рд╛рд╕реНрдЯрд┐рдХ рдореЗрдВ рд╡реЗ рдЕрдм рдирд╣реАрдВ рд╣реИрдВред


: Elasticsearch- , Kubernetes, Kibana. Elastic Serilog.Sinks.Elasticsearch, - Nginx ( , Elasticsearch , ). Nginx , .


Serilog, , Serilog selflog . , Serilog:


Serilog.Debugging.SelfLog.Enable(msg =>
{
  Serilog.Log.Logger.Error($"Serilog self log: {msg}");
});

, , . Kibana.


> Caught exception while preforming bulk operation to Elasticsearch: Elasticsearch.Net.ElasticsearchClientException: Maximum timeout reached while retrying request. Call: Status code unknown from: POST /_bulk

Elasticsearch , Elasticsearch . , HttpClient . , , .


, , . . , API Kubernetes, 5-10 100-150 . HTTP . .


тАУ , , HTTP .


, , bash-, google.com :


while true;
do curl -w "%{time_total}\n" -o /dev/null -s "https://google.com/";
sleep 1;
done

тАУ 5 .


рдЫрд╡рд┐


, :


apiVersion: v1
kind: ConfigMap
metadata:
  name: ubuntu-test-scripts
data:
  loop.sh: |-
    apt-get update;
    apt-get install -y curl;
    while true;
    do echo $(date)'\n';
    curl -w "@/etc/script/curl.txt" -o /dev/null -s "https://google.com/";
    sleep 1;
    done
  curl.txt: |-
    lookup:        %{time_namelookup}\n
    connect:       %{time_connect}\n
    appconnect:    %{time_appconnect}\n
    pretransfer:   %{time_pretransfer}\n
    redirect:      %{time_redirect}\n
    starttransfer: %{time_starttransfer}\n
    total:         %{time_total}\n
---
apiVersion: v1
kind: Pod
metadata:
  name: ubuntu-test
  labels:
      app: ubuntu-test
spec:
  containers:
  - name: test
    image: ubuntu
    args: [/bin/sh, /etc/script/loop.sh]
    volumeMounts:
    - name: config
      mountPath: /etc/script
      readOnly: true
  volumes:
  - name: config
    configMap:
      defaultMode: 0755
      name: ubuntu-test-scripts

тАУ google.com curl. , /dev/null, curl.


, , . тАУ DNS ( тАУ ). Kubernetes 1.14, , , .


, :


рдЫрд╡рд┐


, тАУ DNS-lookup, 99% тАУ 5 . , .



.


, тАФ 5 seconds dns resolve kubernetes.


, :



issue weave.


, :


  1. ( , тАУ 2017 , , , ) .
  2. DNS lookup. , 10-15 .
  3. , DNS- VIP, DNAT.
  4. .

тАУ race conditions conntraking Linux SNAT DNAT. Tobias Klausmann 2009 , Linux 5.0 , .


, Kubernetes DNS, race condition .


glibc ( Ubuntu, Debian . .), :


  1. glibc UDP (A AAAA). UDP connectionless , connect(2) , conntrack .
  2. DNS- Kubernetes VIP DNAT iptables.
  3. DNAT , netfilter :
    a. nf_conntrack_in: conntrack hash object .
    b. nf_nat_ipv4_fn: conntrack.
    c. nf_conntrack_confirm: , .
  4. UDP . , DNS-. , . - insert_failed, .


, workaround:


  1. DNS- nameserver. LocalDNS cache
  2. Weave tc(8) - AAAA DNS
  3. single-request-reopen resolv.conf

, .


Kubernetes 1.9, pod dnsConfig, resolv.conf.


pod, glibc A AAAA , race condition.


spec:
  dnsConfig:
    options:
    - name: single-request-reopen

, тАФ glibc (, alpine, musl), resolv.conf .


PS рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рд╕рд░рд▓ рдореНрдпреВрдЯрд┐рдВрдЧ рд╡реЗрдмрд╣реВрдХ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕рднреА рдирдП рдкреЙрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдиреАрдЪреЗ рд░рдЦрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рдХреЛрдб рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред


All Articles