не может получить доступ к сервисам консула, используя TLS - PullRequest
0 голосов
/ 10 октября 2018

Я новичок в консуле и сталкиваюсь с некоторыми трудностями при регистрации и доступе к сервисам для подключения к консулу, в нашем недавно настроенном кластере консула в Кубернете.

Я указал следующую ссылку для настройки кластера.https://github.com/kelseyhightower/consul-on-kubernetes
Создали секрет, добавив сгенерированные сертификаты и добавив две конфигурации, содержащие настройки клиента и сервера.Просто добавил токен ACL и некоторые другие конфигурации ACL, указанные в другом месте.

Вот мои последние настройки сервера и клиента:

Сервер:

    {
      "acl_datacenter": "dc1",
      "acl_default_policy": "allow",
      "acl_master_token": "root",
      "acl_down_policy": "extend-cache",
      "bind_addr": "0.0.0.0",
      "ca_file": "/etc/tls/ca.pem",
      "cert_file": "/etc/tls/consul.pem",
      "client_addr": "0.0.0.0",
      "datacenter": "dc1",
      "data_dir": "/consul/data",
      "disable_host_node_id": true,
      "domain": "cluster.local",
      "key_file": "/etc/tls/consul-key.pem",
      "server": true,
      "ui": true,
      "verify_incoming": true,
      "verify_outgoing": true,
      "verify_server_hostname": true,
      "connect": {
        "enabled": true,
         "proxy": {
            "allow_managed_api_registration": true,
            "allow_managed_root": true
          }
      },
      "ports": {
        "https": 8443
      }
}

Клиент:

{
  "acl_datacenter": "dc1",
  "acl_default_policy": "allow",
  "acl_down_policy": "extend-cache",
  "acl_master_token": "root",
  "bind_addr": "0.0.0.0",
  "ca_file": "/etc/tls/ca.pem",
  "cert_file": "/etc/tls/consul.pem",
  "datacenter": "dc1",
  "data_dir": "/consul/data",
  "disable_host_node_id": true,
  "domain": "cluster.local",
  "key_file": "/etc/tls/consul-key.pem",
  "server": false,
  "ui": false,
  "verify_incoming": true,
  "verify_outgoing": true,
  "verify_server_hostname": true,
  "connect": {
    "enabled": true,
     "proxy": {}
  },
  "ports": {
    "https": 8443
  }
}

Другое дизайнерское решение заключается в том, что я запускаю консул-клиент как дополнительный процесс в модуле kubernetes, где работает служба.Это просто временно, так как в настоящее время у нас нет доступа для создания DaemonSet в кластере kube.Теперь, когда мы поддерживаем клиентские узлы, они успешно добавляются в кластер.Я даже могу добавить службы для консула коннект, и они видны из интерфейса консула.Но проблема в том, что я могу получить к ним доступ напрямую без TLS и даже при применении намерений к службе.Также не удается выполнить команду копать мастеру консула.Вот скриншоты и конфиги ниже вместе с некоторыми вещами, которые я пробовал.Кластер:

$ consul members
    Node                      Address            Status  Type    Build  Protocol  DC   Segment
    consul-0                  172.16.8.217:8301  alive   server  1.2.3  2         dc1  <all>
    consul-1                  172.16.7.43:8301   alive   server  1.2.3  2         dc1  <all>
    consul-2                  172.16.9.131:8301  alive   server  1.2.3  2         dc1  <all>
    gohttp1-7796bf88f-l6qbc   172.16.8.246:8301  alive   client  1.2.3  2         dc1  <default>
    gohttp2-5679c67c68-2s7bz  172.16.7.55:8301   alive   client  1.2.3  2         dc1  <default>

Сервисы Kubernetes:

$ kubectl get endpoints
NAME                 ENDPOINTS                                                           AGE
consul               172.16.7.43:8301,172.16.8.217:8301,172.16.9.131:8301 + 24 more...   30m
gohttp               172.16.71.248:8080                                                  4d
gohttp1              172.16.8.246:8080                                                   27m
gohttp2              172.16.7.55:9191                                                    26m
kube-state-metrics   172.16.60.81:8080,172.16.60.81:8081                                 35d

Конфигурации служб, которые я добавил в коляске агента консула:

service1.json <-- sidecar1
{
  "service": {
    "name": "gohttp1",
    "port": 8080,
    "connect": { "proxy": {} }
  }
}

service2.json <-- sidecar2
{
  "service": {
    "name": "gohttp2",
    "port": 9191,
    "connect": { "proxy": {} }
  }
}

Сервисы, видимые в интерфейсе консула: enter image description here

Узлы, как видно в интерфейсе консула: enter image description here

Проверка сертификатов:

$curl http://localhost:8500/v1/connect/ca/roots
{"ActiveRootID":"da:bb:23:e9:2c:eb:48:c2:8c:d9:a3:d3:39:5a:e2:4a:c1:03:01:16","TrustDomain":"c93eb719-883e-f3ec-91a4-318806440530.consul","Roots":[{"ID":"da:bb:23:e9:2c:eb:48:c2:8c:d9:a3:d3:39:5a:e2:4a:c1:03:01:16","Name":"Consul CA Root Cert","SerialNumber":10,"SigningKeyID":"64:36:3a:39:36:3a:66:30:3a:38:39:3a:62:36:3a:64:37:3a:37:37:3a:62:36:3a:62:35:3a:32:65:3a:62:65:3a:32:63:3a:34:38:3a:31:61:3a:39:35:3a:34:34:3a:35:63:3a:36:64:3a:65:64:3a:37:38:3a:63:39:3a:31:34:3a:61:62:3a:33:34:3a:61:30:3a:36:62:3a:65:31:3a:33:33:3a:66:32:3a:66:37:3a:65:36:3a:30:35","NotBefore":"2018-10-09T21:19:40Z","NotAfter":"2028-10-06T21:19:40Z","RootCert":"-----BEGIN CERTIFICATE-----\nMIICXDCCAgGgAwIBAgIBCjAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxDb25zdWwg\nQ0EgMTAwHhcNMTgxMDA5MjExOTQwWhcNMjgxMDA2MjExOTQwWjAXMRUwEwYDVQQD\nEwxDb25zdWwgQ0EgMTAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQqMyaMgS0p\nVUUS2nADYXQ3SguxES2wTsHKENAVKe8q15/0cFCWXaJfBRpt3gvawQZPxVprztBn\nwb6HFdYgJX0go4IBPDCCATgwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB\nAf8waAYDVR0OBGEEX2Q2Ojk2OmYwOjg5OmI2OmQ3Ojc3OmI2OmI1OjJlOmJlOjJj\nOjQ4OjFhOjk1OjQ0OjVjOjZkOmVkOjc4OmM5OjE0OmFiOjM0OmEwOjZiOmUxOjMz\nOmYyOmY3OmU2OjA1MGoGA1UdIwRjMGGAX2Q2Ojk2OmYwOjg5OmI2OmQ3Ojc3OmI2\nOmI1OjJlOmJlOjJjOjQ4OjFhOjk1OjQ0OjVjOjZkOmVkOjc4OmM5OjE0OmFiOjM0\nOmEwOjZiOmUxOjMzOmYyOmY3OmU2OjA1MD8GA1UdEQQ4MDaGNHNwaWZmZTovL2M5\nM2ViNzE5LTg4M2UtZjNlYy05MWE0LTMxODgwNjQ0MDUzMC5jb25zdWwwCgYIKoZI\nzj0EAwIDSQAwRgIhALNau/tIFiNz6aCu8Spa5Mj4Usksb6qDL/sW7uqgducyAiEA\npvrwfeK37epjSX7zCTnYPI7hFXXNcS02F77fAzLIAo4=\n-----END CERTIFICATE-----\n","IntermediateCerts":null,"Active":true,"CreateIndex":11,"ModifyIndex":11}]}

$ curl http://localhost:8500/v1/connect/ca/configuration
{"Provider":"consul","Config":{"LeafCertTTL":"72h","RotationPeriod":"2160h"},"CreateIndex":8,"ModifyIndex":8}

Теперь, когда я пытаюсь выполнить поиск копания, я получаю сообщение об ошибке.

$dig @127.0.0.1 -p 8600 gohttp2.connect.consul
; <<>> DiG 9.10.6 <<>> @127.0.0.1 -p 8600 gohttp2.connect.consul
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached

Или, если я войду (exec в pod) службы 1 и попытаюсь получить доступ к службе 2,Я могу получить доступ напрямую без TLS.Я вижу это в режиме curl verbose.Там нет сертификата валидации как таковой.Кроме того, даже если добавить намерение, я все еще могу получить доступ к службе.Я неправильно регистрируюсь или получаю доступ к услуге?

$kubectl exec -it gohttp1-7796bf88f-l6qbc -c consul /bin/sh
# curl -v gohttp2.2304613691.svc:9191
* Rebuilt URL to: gohttp2.2304613691.svc:9191/
*   Trying 192.168.93.239...
* TCP_NODELAY set
* Connected to gohttp2.2304613691.svc (192.168.93.239) port 9191 (#0)
> GET / HTTP/1.1
> Host: gohttp2.2304613691.svc:9191
> User-Agent: curl/7.61.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Tue, 09 Oct 2018 22:21:53 GMT
< Content-Length: 12
< Content-Type: text/plain; charset=utf-8
< 
* Connection #0 to host gohttp2.2304613691.svc left intact
Hello world!/
...