fix: Consul Catalog documentation.

This commit is contained in:
Ludovic Fernandez 2019-10-29 12:32:05 +01:00 committed by Traefiker Bot
parent d66dd01438
commit 5f8fb6c226
11 changed files with 360 additions and 221 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -14,12 +14,12 @@ Attach labels to your services and let Traefik do the rest!
Enabling the consulcatalog provider
```toml tab="File (TOML)"
[providers.consulcatalog]
[providers.consulCatalog]
```
```yaml tab="File (YAML)"
providers:
consulcatalog: {}
consulCatalog: {}
```
```bash tab="CLI"
@ -39,34 +39,19 @@ See the dedicated section in [routing](../routing/providers/consul-catalog.md).
## Provider Configuration
??? tip "Browse the Reference"
If you're in a hurry, maybe you'd rather go through the configuration reference:
```toml tab="File (TOML)"
--8<-- "content/providers/consul-catalog.toml"
```
```yaml tab="File (YAML)"
--8<-- "content/providers/consul-catalog.yml"
```
```bash tab="CLI"
--8<-- "content/providers/consul-catalog.txt"
```
### `exposedByDefault`
_Optional, Default=true_
```toml tab="File (TOML)"
[providers.consulcatalog]
[providers.consulCatalog]
exposedByDefault = false
# ...
```
```yaml tab="File (YAML)"
providers:
consulcatalog:
consulCatalog:
exposedByDefault: false
# ...
```
@ -86,14 +71,14 @@ See also [Restrict the Scope of Service Discovery](./overview.md#restrict-the-sc
_Optional, Default=```Host(`{{ normalize .Name }}`)```_
```toml tab="File (TOML)"
[providers.consulcatalog]
[providers.consulCatalog]
defaultRule = "Host(`{{ .Name }}.{{ index .Labels \"customLabel\"}}`)"
# ...
```
```yaml tab="File (YAML)"
providers:
consulcatalog:
consulCatalog:
defaultRule: "Host(`{{ .Name }}.{{ index .Labels \"customLabel\"}}`)"
# ...
```
@ -113,92 +98,43 @@ and the template has access to all the labels defined on this container.
This option can be overridden on a container basis with the `traefik.http.routers.Router1.rule` label.
### `enableServiceHealthFilter`
### `refreshInterval`
_Optional, Default=true_
_Optional, Default=15s_
```toml tab="File (TOML)"
[providers.consulcatalog]
enableServiceHealthFilter = false
[providers.consulCatalog]
refreshInterval = "30s"
# ...
```
```yaml tab="File (YAML)"
providers:
consulcatalog:
enableServiceHealthFilter: false
consulCatalog:
refreshInterval: 30s
# ...
```
```bash tab="CLI"
--providers.consulcatalog.enableServiceHealthFilter=false
--providers.consulcatalog.refreshInterval=30s
# ...
```
Filter services with unhealthy states and inactive states.
### `refreshSeconds`
_Optional, Default=15_
```toml tab="File (TOML)"
[providers.consulcatalog]
refreshSeconds = 30
# ...
```
```yaml tab="File (YAML)"
providers:
consulcatalog:
refreshSeconds: 30
# ...
```
```bash tab="CLI"
--providers.consulcatalog.refreshSeconds=30
# ...
```
Defines the polling interval (in seconds).
### `intervalPoll`
_Optional, Default=false_
```toml tab="File (TOML)"
[providers.consulcatalog]
intervalPoll = true
# ...
```
```yaml tab="File (YAML)"
providers:
consulcatalog:
intervalPoll: true
# ...
```
```bash tab="CLI"
--providers.consulcatalog.intervalPoll=true
# ...
```
Poll the Consul Catalog metadata service for changes every `consulcatalog.refreshSeconds`,
which is less accurate than the default long polling technique which will provide near instantaneous updates to Traefik.
Defines the polling interval.
### `prefix`
_Optional, Default=/latest_
```toml tab="File (TOML)"
[providers.consulcatalog]
[providers.consulCatalog]
prefix = "/test"
# ...
```
```yaml tab="File (YAML)"
providers:
consulcatalog:
consulCatalog:
prefix: "/test"
# ...
```
@ -208,21 +144,21 @@ providers:
# ...
```
Prefix used for accessing the Consul Catalog service
Prefix used for accessing the Consul service metadata.
### `constraints`
_Optional, Default=""_
```toml tab="File (TOML)"
[providers.consulcatalog]
[providers.consulCatalog]
constraints = "Label(`a.label.name`, `foo`)"
# ...
```
```yaml tab="File (YAML)"
providers:
consulcatalog:
consulCatalog:
constraints: "Label(`a.label.name`, `foo`)"
# ...
```
@ -271,3 +207,325 @@ The expression syntax is based on the `Label("key", "value")`, and `LabelRegex("
```
See also [Restrict the Scope of Service Discovery](./overview.md#restrict-the-scope-of-service-discovery).
### `endpoint`
Defines Consul server endpoint.
#### `address`
_Optional, Default="http://127.0.0.1:8500"_
```toml tab="File (TOML)"
[providers.consulCatalog]
[providers.consulCatalog.endpoint]
address = "http://127.0.0.1:8500"
# ...
```
```yaml tab="File (YAML)"
providers:
consulCatalog:
endpoint:
address: http://127.0.0.1:8500
# ...
```
```bash tab="CLI"
--providers.consulcatalog.endpoint.address=http://127.0.0.1:8500
# ...
```
Defines the address of the Consul server.
#### `scheme`
_Optional, Default=""_
```toml tab="File (TOML)"
[providers.consulCatalog]
[providers.consulCatalog.endpoint]
scheme = "https"
# ...
```
```yaml tab="File (YAML)"
providers:
consulCatalog:
endpoint:
scheme: https
# ...
```
```bash tab="CLI"
--providers.consulcatalog.endpoint.scheme=https
# ...
```
Defines the URI scheme for the Consul server.
#### `datacenter`
_Optional, Default=""_
```toml tab="File (TOML)"
[providers.consulCatalog]
[providers.consulCatalog.endpoint]
datacenter = "test"
# ...
```
```yaml tab="File (YAML)"
providers:
consulCatalog:
endpoint:
datacenter: test
# ...
```
```bash tab="CLI"
--providers.consulcatalog.endpoint.datacenter=test
# ...
```
Defines the Data center to use.
If not provided, the default agent data center is used.
#### `token`
_Optional, Default=""_
```toml tab="File (TOML)"
[providers.consulCatalog]
[providers.consulCatalog.endpoint]
token = "test"
# ...
```
```yaml tab="File (YAML)"
providers:
consulCatalog:
endpoint:
token: test
# ...
```
```bash tab="CLI"
--providers.consulcatalog.endpoint.token=test
# ...
```
Token is used to provide a per-request ACL token which overrides the agent's default token.
#### `endpointWaitTime`
_Optional, Default=""_
```toml tab="File (TOML)"
[providers.consulCatalog]
[providers.consulCatalog.endpoint]
endpointWaitTime = "15s"
# ...
```
```yaml tab="File (YAML)"
providers:
consulCatalog:
endpoint:
endpointWaitTime: 15s
# ...
```
```bash tab="CLI"
--providers.consulcatalog.endpoint.endpointwaittime=15s
# ...
```
WaitTime limits how long a Watch will block.
If not provided, the agent default values will be used
#### `httpAuth`
_Optional_
Used to authenticate http client with HTTP Basic Authentication.
##### `username`
_Optional_
```toml tab="File (TOML)"
[providers.consulCatalog.endpoint.httpAuth]
username = "test"
```
```yaml tab="File (YAML)"
providers:
consulCatalog:
endpoint:
httpAuth:
username: test
```
```bash tab="CLI"
--providers.consulcatalog.endpoint.httpauth.username=test
```
Username to use for HTTP Basic Authentication
##### `password`
_Optional_
```toml tab="File (TOML)"
[providers.consulCatalog.endpoint.httpAuth]
password = "test"
```
```yaml tab="File (YAML)"
providers:
consulCatalog:
endpoint:
httpAuth:
password: test
```
```bash tab="CLI"
--providers.consulcatalog.endpoint.httpauth.password=test
```
Password to use for HTTP Basic Authentication
#### `tls`
_Optional_
Defines TLS options for Consul server endpoint.
##### `ca`
_Optional_
```toml tab="File (TOML)"
[providers.consulCatalog.endpoint.tls]
ca = "path/to/ca.crt"
```
```yaml tab="File (YAML)"
providers:
consulCatalog:
endpoint:
tls:
ca: path/to/ca.crt
```
```bash tab="CLI"
--providers.consulcatalog.endpoint.tls.ca=path/to/ca.crt
```
`ca` is the path to the CA certificate used for Consul communication, defaults to the system bundle if not specified.
##### `caOptional`
_Optional_
```toml tab="File (TOML)"
[providers.consulCatalog.endpoint.tls]
caOptional = true
```
```yaml tab="File (YAML)"
providers:
consulCatalog:
endpoint:
tls:
caOptional: true
```
```bash tab="CLI"
--providers.consulcatalog.endpoint.tls.caoptional=true
```
Policy followed for the secured connection with TLS Client Authentication to Consul.
Requires `tls.ca` to be defined.
- `true`: VerifyClientCertIfGiven
- `false`: RequireAndVerifyClientCert
- if `tls.ca` is undefined NoClientCert
##### `cert`
_Optional_
```toml tab="File (TOML)"
[providers.consulCatalog.endpoint.tls]
cert = "path/to/foo.cert"
key = "path/to/foo.key"
```
```yaml tab="File (YAML)"
providers:
consulCatalog:
endpoint:
tls:
cert: path/to/foo.cert
key: path/to/foo.key
```
```bash tab="CLI"
--providers.consulcatalog.endpoint.tls.cert=path/to/foo.cert
--providers.consulcatalog.endpoint.tls.key=path/to/foo.key
```
`cert` is the path to the public certificate for Consul communication.
If this is set then you need to also set `key.
##### `key`
_Optional_
```toml tab="File (TOML)"
[providers.consulCatalog.endpoint.tls]
cert = "path/to/foo.cert"
key = "path/to/foo.key"
```
```yaml tab="File (YAML)"
providers:
consulCatalog:
endpoint:
tls:
cert: path/to/foo.cert
key: path/to/foo.key
```
```bash tab="CLI"
--providers.consulcatalog.endpoint.tls.cert=path/to/foo.cert
--providers.consulcatalog.endpoint.tls.key=path/to/foo.key
```
`key` is the path to the private key for Consul communication.
If this is set then you need to also set `cert`.
##### `insecureSkipVerify`
_Optional_
```toml tab="File (TOML)"
[providers.consulCatalog.endpoint.tls]
insecureSkipVerify = true
```
```yaml tab="File (YAML)"
providers:
consulCatalog:
endpoint:
tls:
insecureSkipVerify: true
```
```bash tab="CLI"
--providers.consulcatalog.endpoint.tls.insecureskipverify=true
```
If `insecureSkipVerify` is `true`, TLS for the connection to Consul server accepts any certificate presented by the server and any host name in that certificate.

View file

@ -1,44 +0,0 @@
# Enable Consul Catalog Provider.
[providers.consulcatalog]
# Expose Consul Catalog services by default in Traefik.
exposedByDefault = true
# Prefix used for accessing the Consul service metadata.
prefix = "traefik"
# Defines the polling interval (in seconds).
refreshSeconds = 15
# Defines default rule.
defaultRule = "foobar"
# Defines Consul Catalog Provider endpoint.
[providers.consulcatalog.endpoint]
# Defines the consul address endpoint.
address = "127.0.0.1:8500"
# Defines the scheme used.
scheme = "foobar"
# Defines the DC.
datacenter = "foobar"
# Defines the token.
token = "foobar"
# Defines the expoint wait time.
endpointWaitTime = "15s"
# Defines Consul Catalog Provider TLS endpoint.
[providers.consulcatalog.endpoint.tls]
# Defines Consul Catalog Provider endpoint.
caOptional = true
cert = "foobar"
key = "foobar"
insecureSkipVerify = true

View file

@ -1,53 +0,0 @@
# Enable Consul Catalog Provider.
--providers.consulcatalog
# Enable Consul Catalog Provider constraints.
--providers.consulcatalog.constraints
# Defines the Consul Catalog default rule.
--providers.consulcatalog.defaultrule
# Defines the Consul Catalog endpoint address.
--providers.consulcatalog.endpoint.address
# Defines the Consul Catalog endpoint data-center.
--providers.consulcatalog.endpoint.datacenter
# Defines the Consul Catalog endpoint wait time.
--providers.consulcatalog.endpoint.endpointwaittime
# Defines the Consul Catalog endpoint http auth password.
--providers.consulcatalog.endpoint.httpauth.password
# Defines the Consul Catalog endpoint http auth username.
--providers.consulcatalog.endpoint.httpauth.username
# Defines the Consul Catalog endpoint scheme.
--providers.consulcatalog.endpoint.scheme
# Defines the Consul Catalog endpoint tls CA.
--providers.consulcatalog.endpoint.tls.ca
# Defines the Consul Catalog endpoint tls optional CA.
--providers.consulcatalog.endpoint.tls.caoptional
# Defines the Consul Catalog endpoint tls cert.
--providers.consulcatalog.endpoint.tls.cert
# Defines the Consul Catalog endpoint tls insecure skip verify.
--providers.consulcatalog.endpoint.tls.insecureskipverify
# Defines the Consul Catalog endpoint tls key.
--providers.consulcatalog.endpoint.tls.key
# Defines the Consul Catalog endpoint token.
--providers.consulcatalog.endpoint.token
# Defines the Consul Catalog expose by default.
--providers.consulcatalog.exposedbydefault
# Defines the Consul Catalog prefix.
--providers.consulcatalog.prefix
# Defines the Consul Catalog refresh interval.
--providers.consulcatalog.refreshinterval

View file

@ -1,31 +0,0 @@
# Enable Rancher Provider.
providers:
consulcatalog:
# Expose Consul Catalog services by default in Traefik.
exposedByDefault: true
# Defines the consul address endpoint.
address: 127.0.0.1:8500
# Defines the scheme used.
scheme: "foobar"
# Defines the DC.
datacenter: "foobar"
# Defines the token.
token: "foobar"
# Defines the expoint wait time.
endpointWaitTime: "15s"
# Defines Consul Catalog Provider TLS endpoint.
endpoint:
tls:
# Defines Consul Catalog Provider endpoint.
caOptional: true
cert: "foobar"
key: "foobar"
insecureSkipVerify: true

View file

@ -108,19 +108,19 @@
refreshSeconds = 42
intervalPoll = true
prefix = "foobar"
[providers.consulcatalog]
[providers.consulCatalog]
constraints = "foobar"
prefix = "traefik"
defaultRule = "foobar"
exposedByDefault = true
refreshInterval = 15
[providers.consulcatalog.endpoint]
[providers.consulCatalog.endpoint]
address = "foobar"
scheme = "foobar"
datacenter = "foobar"
token = "foobar"
endpointWaitTime = "15s"
[providers.consulcatalog.endpoint.tls]
[providers.consulCatalog.endpoint.tls]
ca = "foobar"
caOptional = true
cert = "foobar"

View file

@ -115,7 +115,7 @@ providers:
refreshSeconds: 42
intervalPoll: true
prefix: foobar
consulcatalog:
consulCatalog:
constraints: foobar
prefix: traefik
defaultRule: foobar

View file

@ -13,8 +13,8 @@
insecure = true
[providers]
[providers.consulcatalog]
[providers.consulCatalog]
exposedByDefault = false
refreshInterval = "500ms"
[providers.consulcatalog.endpoint]
[providers.consulCatalog.endpoint]
address = "{{ .ConsulAddress }}"

View file

@ -13,9 +13,9 @@
insecure = true
[providers]
[providers.consulcatalog]
[providers.consulCatalog]
exposedByDefault = true
refreshInterval = "500ms"
defaultRule = "{{ .DefaultRule }}"
[providers.consulcatalog.endpoint]
[providers.consulCatalog.endpoint]
address = "{{ .ConsulAddress }}"

View file

@ -162,7 +162,7 @@ type Providers struct {
KubernetesCRD *crd.Provider `description:"Enable Kubernetes backend with default settings." json:"kubernetesCRD,omitempty" toml:"kubernetesCRD,omitempty" yaml:"kubernetesCRD,omitempty" export:"true" label:"allowEmpty"`
Rest *rest.Provider `description:"Enable Rest backend with default settings." json:"rest,omitempty" toml:"rest,omitempty" yaml:"rest,omitempty" export:"true" label:"allowEmpty"`
Rancher *rancher.Provider `description:"Enable Rancher backend with default settings." json:"rancher,omitempty" toml:"rancher,omitempty" yaml:"rancher,omitempty" export:"true" label:"allowEmpty"`
ConsulCatalog *consulcatalog.Provider `description:"Enable ConsulCatalog backend with default settings." json:"consulcatalog,omitempty" toml:"consulcatalog,omitempty" yaml:"consulcatalog,omitempty"`
ConsulCatalog *consulcatalog.Provider `description:"Enable ConsulCatalog backend with default settings." json:"consulCatalog,omitempty" toml:"consulCatalog,omitempty" yaml:"consulCatalog,omitempty"`
}
// SetEffectiveConfiguration adds missing configuration parameters derived from existing ones.

View file

@ -1 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 79.97 113.78"><defs><style>.cls-1{fill:#961d59;}.cls-1,.cls-2{fill-rule:evenodd;}.cls-2,.cls-3{fill:#d62783;}</style></defs><title>Asset 1</title><g id="Layer_2" data-name="Layer 2"><g id="Logo"><path d="M0,98.24c0-3.85,2.24-6.08,7.47-6.08a23.78,23.78,0,0,1,5.71.69l-.44,3.44a30.92,30.92,0,0,0-5.14-.54C4.86,95.75,4,96.7,4,98.94V107c0,2.24.88,3.18,3.62,3.18a30.92,30.92,0,0,0,5.14-.54l.44,3.44a23.78,23.78,0,0,1-5.71.69c-5.23,0-7.47-2.24-7.47-6.08Z"/><path d="M21.69,113.78c-5.26,0-6.68-2.9-6.68-6.05v-3.88c0-3.15,1.42-6.05,6.68-6.05s6.68,2.9,6.68,6.05v3.88C28.37,110.88,27,113.78,21.69,113.78Zm0-12.7c-2,0-2.84.91-2.84,2.65v4.13c0,1.73.79,2.65,2.84,2.65s2.84-.91,2.84-2.65v-4.13C24.53,102,23.74,101.08,21.69,101.08Z"/><path d="M40.06,113.47V102.75c0-.82-.35-1.23-1.23-1.23a10.61,10.61,0,0,0-4,1.29v10.65H31V98.12h2.93l.38,1.29a15.39,15.39,0,0,1,6.15-1.61c2.55,0,3.47,1.8,3.47,4.54v11.13Z"/><path d="M51.82,113.78a18.08,18.08,0,0,1-5.3-.88l.54-2.93a17.18,17.18,0,0,0,4.57.66c1.7,0,2-.38,2-1.54,0-.95-.19-1.42-2.68-2-3.75-.91-4.19-1.86-4.19-4.82s1.36-4.44,5.74-4.44a20.18,20.18,0,0,1,4.6.54l-.38,3.06a27,27,0,0,0-4.22-.44c-1.67,0-2,.38-2,1.32,0,1.23.09,1.32,2.18,1.86,4.29,1.13,4.7,1.7,4.7,4.85C57.37,112,56.45,113.78,51.82,113.78Z"/><path d="M63.73,98.12v10.72c0,.82.35,1.23,1.23,1.23a10.61,10.61,0,0,0,4-1.29V98.12h3.85v15.35H69.88l-.38-1.29a15.39,15.39,0,0,1-6.15,1.61c-2.55,0-3.47-1.8-3.47-4.54V98.12Z"/><path d="M76.12,113.47V91.84L80,91.31v22.16Z"/><path d="M2.93,88.42V86.3H1v2.12H0V83.33H1v2.13H2.93V83.33h1v5.09Zm4.62,0H6.76l-.07-.25a2.15,2.15,0,0,1-1.14.32c-.7,0-1-.46-1-1.09s.34-1,1.11-1h.92V86c0-.41-.12-.55-.73-.55a5.56,5.56,0,0,0-1.06.11l-.12-.7A5.18,5.18,0,0,1,6,84.67c1.2,0,1.55.41,1.55,1.33ZM6.59,87H5.88c-.31,0-.4.08-.4.36s.09.37.38.37a1.55,1.55,0,0,0,.72-.19Zm3,1.46a4.68,4.68,0,0,1-1.32-.21l.13-.7a4.45,4.45,0,0,0,1.14.16c.42,0,.49-.09.49-.37s0-.34-.67-.48c-.93-.22-1-.44-1-1.15s.34-1.06,1.43-1.06a5.23,5.23,0,0,1,1.15.13l-.09.73a7,7,0,0,0-1.05-.11c-.42,0-.49.09-.49.32s0,.32.54.44c1.07.27,1.17.41,1.17,1.16S10.7,88.49,9.55,88.49Zm4.38-.08V85.86c0-.2-.09-.29-.31-.29a2.72,2.72,0,0,0-1,.31v2.55h-1V83.26l1,.14V85a3.48,3.48,0,0,1,1.4-.35c.64,0,.86.43.86,1.09v2.66Zm1.76-4.19v-.9h1v.9Zm0,4.19V84.75h1v3.67Zm1.72-3.64c0-.92.56-1.45,1.86-1.45a6.15,6.15,0,0,1,1.42.17l-.11.82a8,8,0,0,0-1.28-.13c-.68,0-.9.23-.9.76v1.93c0,.54.22.76.9.76a8,8,0,0,0,1.28-.13l.11.82a6.15,6.15,0,0,1-1.42.17c-1.3,0-1.86-.54-1.86-1.45Zm5.4,3.72c-1.31,0-1.66-.69-1.66-1.45v-.93c0-.75.35-1.45,1.66-1.45s1.66.69,1.66,1.45V87C24.48,87.8,24.13,88.49,22.82,88.49Zm0-3c-.51,0-.71.22-.71.63v1c0,.41.2.63.71.63s.71-.22.71-.63v-1C23.52,85.68,23.33,85.46,22.82,85.46Zm4.36.06a7.59,7.59,0,0,0-1,.54v2.37h-1V84.75H26l.06.41a4.35,4.35,0,0,1,1-.48ZM31,87.2a1.13,1.13,0,0,1-1.26,1.3,5.49,5.49,0,0,1-1-.11v1.5l-1,.14V84.75h.76l.09.31a2.07,2.07,0,0,1,1.21-.38c.77,0,1.18.44,1.18,1.27Zm-2.28.41a4.41,4.41,0,0,0,.85.1c.35,0,.48-.16.48-.49v-1.3c0-.3-.12-.47-.47-.47a1.38,1.38,0,0,0-.86.33Z"/><path class="cls-1" d="M38.56,47A8.35,8.35,0,1,1,46.9,38.6,8.33,8.33,0,0,1,38.56,47"/><path class="cls-2" d="M54.81,42.46a3.85,3.85,0,1,1,3.85-3.85,3.84,3.84,0,0,1-3.85,3.85"/><path class="cls-2" d="M68.9,46.09h0a3.69,3.69,0,1,1,.08-.3c0,.1,0,.19-.08.3"/><path class="cls-2" d="M66.18,36.17A3.86,3.86,0,1,1,69,31.54a4,4,0,0,1,0,1.51,3.71,3.71,0,0,1-2.9,3.13"/><path class="cls-2" d="M79.88,45.67a3.85,3.85,0,1,1-3.13-4.46A3.87,3.87,0,0,1,80,45.32a1,1,0,0,0-.08.34"/><path class="cls-2" d="M76.74,36a3.84,3.84,0,1,1,3.16-4.42,4.29,4.29,0,0,1,0,1A3.82,3.82,0,0,1,76.74,36"/><path class="cls-2" d="M74.06,59h0a3.9,3.9,0,1,1,.48-1.58A3.47,3.47,0,0,1,74.06,59"/><path class="cls-2" d="M72.67,23.62a3.86,3.86,0,1,1,1.47-5.26,3.6,3.6,0,0,1,.48,2.23,3.86,3.86,0,0,1-1.94,3"/><path class="cls-3" d="M38.71,77.41A38.71,38.71,0,1,1,38.71,0,38.33,38.33,0,0,1,62.21,8l-4.73,6.17A30.91,30.91,0,0,0,7.78,38.71,30.94,30.94,0,0,0,57.49,63.29l4.72,6.18A38.37,38.37,0,0,1,38.71,77.41Z"/></g></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="72" height="72" viewBox="0 0 72 72">
<circle cx="36" cy="36" r="36" fill="#c62a71"/>
<g fill="#fff">
<g fill-rule="evenodd">
<path d="M34.886 42.4a6.47 6.47 0 116.46-6.48 6.46 6.46 0 01-6.46 6.48M47.476 38.92a3 3 0 113-3 3 3 0 01-3 3M58.396 41.73a2.86 2.86 0 11.06-.24c0 .07 0 .15-.06.24M56.286 34a3 3 0 112.22-3.59 3.14 3.14 0 010 1.17 2.87 2.87 0 01-2.22 2.42M66.906 41.4a3 3 0 11-2.42-3.46 3 3 0 012.51 3.19.77.77 0 00-.06.27M64.476 33.91a3 3 0 112.45-3.43 3.32 3.32 0 010 .77 3 3 0 01-2.48 2.66M62.396 51.74a3 3 0 11.37-1.23 2.69 2.69 0 01-.37 1.23M61.316 24.31a3 3 0 111.14-4.08 2.79 2.79 0 01.37 1.77 3 3 0 01-1.51 2.35"/>
</g>
<path
d="M34.996 66a30 30 0 110-60 29.71 29.71 0 0118.22 6.17L49.546 17a24 24 0 00-38.55 19 24 24 0 0038.56 19.06l3.66 4.79A29.74 29.74 0 0134.996 66z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 877 B