Я новичок в консуле и сталкиваюсь с некоторыми трудностями при регистрации и доступе к сервисам для подключения к консулу, в нашем недавно настроенном кластере консула в Кубернете.
Я указал следующую ссылку для настройки кластера.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": {} }
}
}
Сервисы, видимые в интерфейсе консула:
Узлы, как видно в интерфейсе консула:
Проверка сертификатов:
$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!/