<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Guides on contineroo.ch</title>
    <link>/docs/cloudflare-operator/guides/</link>
    <description>Recent content in Guides on contineroo.ch</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <atom:link href="/docs/cloudflare-operator/guides/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Create DNS records from Ingress</title>
      <link>/docs/cloudflare-operator/guides/ingress/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/docs/cloudflare-operator/guides/ingress/</guid>
      <description>&lt;p&gt;cloudflare-operator can create DNS records from Ingress resources. This guide shows how to configure the controller to automatically create DNS records for your Ingress resources. The same annotations also apply to supported Gateway API route objects when the feature flag &lt;code&gt;--enable-gateway-api&lt;/code&gt; is enabled.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ingress-annotations&#34;&gt;Ingress annotations&lt;/h2&gt;&#xA;&lt;p&gt;One of the following annotations is required: &lt;code&gt;cloudflare-operator.io/content&lt;/code&gt; or &lt;code&gt;cloudflare-operator.io/ip-ref&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ingress objects that do not have one of these annotations will be ignored by cloudflare-operator.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Create DNS records from Gateway API routes</title>
      <link>/docs/cloudflare-operator/guides/gateway-api/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/docs/cloudflare-operator/guides/gateway-api/</guid>
      <description>&lt;p&gt;cloudflare-operator can create DNS records from Gateway API route resources. This is an opt-in feature controlled by &lt;code&gt;--enable-gateway-api&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Supported route kinds:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;HTTPRoute&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;TLSRoute&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;GRPCRoute&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;code&gt;TCPRoute&lt;/code&gt; and &lt;code&gt;UDPRoute&lt;/code&gt; are not supported directly because Gateway API does not define route-level hostnames for them. If you need DNS for TCP or UDP traffic, create a &lt;code&gt;DNSRecord&lt;/code&gt; resource manually for the hostname that should resolve to your gateway.&lt;/p&gt;&#xA;&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Install the Gateway API CRDs (for example &lt;code&gt;gateway.networking.k8s.io/v1&lt;/code&gt; from the upstream install manifests).&lt;/li&gt;&#xA;&lt;li&gt;Start cloudflare-operator with the flag &lt;code&gt;--enable-gateway-api&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;When installed with Helm, enable Gateway API reconciliation with:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monitoring with Prometheus</title>
      <link>/docs/cloudflare-operator/guides/monitoring/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/docs/cloudflare-operator/guides/monitoring/</guid>
      <description>&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/prometheus-community/helm-charts/tree/main/charts/prometheus&#34;&gt;Prometheus&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/grafana/helm-charts/tree/main/charts/grafana&#34;&gt;Grafana&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-state-metrics&#34;&gt;kube-state-metrics&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The easiest way to deploy all the necessary components is to use&#xA;&lt;a href=&#34;https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack&#34;&gt;kube-prometheus-stack&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;enable-metrics&#34;&gt;Enable metrics&lt;/h2&gt;&#xA;&lt;p&gt;In order to enable metrics and automatically deploy the required resources, you need to reconfigure the Helm chart.&lt;/p&gt;&#xA;&lt;p&gt;Create a &lt;code&gt;values.yaml&lt;/code&gt; file with the following content:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;metrics&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;podMonitor&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;enabled&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;prometheusRule&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;enabled&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now you can install / upgrade the Helm chart by following &lt;a href=&#34;/docs/cloudflare-operator/installation/#customized-installation&#34;&gt;the installation guide&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install-cloudflare-operator-grafana-dashboard&#34;&gt;Install cloudflare-operator Grafana dashboard&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Download Grafana dashboard&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget https://raw.githubusercontent.com/containeroo/cloudflare-operator/master/config/manifests/grafana/dashboards/overview.json -O /tmp/grafana-dashboard-cloudflare-operator.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Create the configmap&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl create configmap grafana-dashboard-cloudflare-operator --from-file&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/tmp/grafana-dashboard-cloudflare-operator.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Add label so Grafana can fetch dashboard&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl label configmap grafana-dashboard-cloudflare-operator grafana_dashboard&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;available-metrics&#34;&gt;Available metrics&lt;/h2&gt;&#xA;&lt;p&gt;For each &lt;code&gt;cloudflare-operator.io&lt;/code&gt; kind, the controller exposes a gauge metric to track the status condition.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dynamic DNS with IP objects</title>
      <link>/docs/cloudflare-operator/guides/dynamic_ip/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/docs/cloudflare-operator/guides/dynamic_ip/</guid>
      <description>&lt;p&gt;As described in the &lt;a href=&#34;/docs/cloudflare-operator/core_concepts/#ip-objects&#34;&gt;core concept&lt;/a&gt;, IP objects allow you to&#xA;use cloudflare-operator as a dynamic DNS controller.&lt;/p&gt;&#xA;&lt;p&gt;In this guide, we will configure an IP object to fetch the public IP address from the internet and use it as the target&#xA;content for a DNS record.&lt;/p&gt;&#xA;&lt;h2 id=&#34;simple-example&#34;&gt;Simple example&lt;/h2&gt;&#xA;&lt;p&gt;Create an IP object with the following content:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;apiVersion&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;cloudflare-operator.io/v1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;kind&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;IP&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;metadata&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;external-v4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;spec&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;ipSources&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;requestMethod&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;GET&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;url&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;https://ifconfig.me/ip&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;requestMethod&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;GET&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;url&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;https://ipecho.net/plain&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;requestMethod&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;GET&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;url&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;https://myip.is/ip/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;requestMethod&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;GET&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;url&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;https://checkip.amazonaws.com&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;requestMethod&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;GET&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;url&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;https://api.ipify.org&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;type&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;dynamic&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;interval&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;5m0s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The IP object will fetch the public IP address from the internet using one of the specified URLs.&lt;br&gt;&#xA;If the request fails, the next URL will be tried. If all URLs fail, the last known IP will be used and&#xA;the ready condition will be set to &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Zone Migration</title>
      <link>/docs/cloudflare-operator/guides/zone_migration/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/docs/cloudflare-operator/guides/zone_migration/</guid>
      <description>&lt;p&gt;Starting with version v1.4.0, DNS record management has been redesigned to support externally managed records. This update requires users to explicitly specify which zones the operator should manage, providing greater control and preventing unintended modifications.&lt;/p&gt;&#xA;&lt;p&gt;For users already running cloudflare-operator prior to v1.4.0, existing functionality remains unchanged, except that DNS records are no longer automatically pruned. To restore the previous behavior, set the &lt;code&gt;spec.prune&lt;/code&gt; field to &lt;code&gt;true&lt;/code&gt; in the Zone object.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fetch IP from a Kubernetes object</title>
      <link>/docs/cloudflare-operator/guides/ip_from_k8s/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/docs/cloudflare-operator/guides/ip_from_k8s/</guid>
      <description>&lt;p&gt;If you have a Kubernetes object that contains an IP address, you can use cloudflare-operator to fetch the IP address from the object and use it as the target content for a DNS record.&lt;/p&gt;&#xA;&lt;p&gt;This can be useful if you are using Istio or want to fetch the IP from a Kubernetes service.&lt;/p&gt;&#xA;&lt;p&gt;This guide will show you how to configure an IP object to fetch the IP address from a Kubernetes service.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Migration to cloudflare-operator</title>
      <link>/docs/cloudflare-operator/guides/migration/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/docs/cloudflare-operator/guides/migration/</guid>
      <description>&lt;p&gt;cloudflare-operator is designed to be the single source of truth for DNS records. This means that all records not known to cloudflare-operator will be deleted.&lt;/p&gt;&#xA;&lt;p&gt;In order to prevent the deletion of the entire DNS zone after you have installed cloudflare-operator, you need to migrate your DNS records to cloudflare-operator.&lt;/p&gt;&#xA;&lt;p&gt;For that we have created a &lt;a href=&#34;https://github.com/containeroo/cfop-generator&#34; target=&#34;blank&#34;&gt;migration tool&lt;/a&gt; that generates DNSRecord objects for all DNS records in your DNS zone.&lt;/p&gt;&#xA;&lt;p&gt;To export your DNS records, follow &lt;a href=&#34;https://developers.cloudflare.com/dns/manage-dns-records/how-to/import-and-export/#export-records&#34; target=&#34;blank&#34;&gt;this guide&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
