Citrix ADC ingress controller

注釈

イングレス注釈

Citrix がサポートするイングレス注釈は次のとおりです。

[注釈] 可能な価値 説明 デフォルト
ingress.citrix.com/frontend-ip IPアドレス この注釈を使用して、仮想 IP アドレス (VIP) をカスタマイズします。このIPアドレスは、Citrix ADCではVIPとして構成されています。Citrix ADC VPXまたはMPXを使用している場合、注釈は必須です。 Citrix ADC IPアドレスはVIPとして使用されます。
    注: Citrix ADC IPアドレスをVIPとして使用する場合は、注釈を使用しないでください。  
ingress.citrix.com/frontend-ipset-name IPSET の名前 この注釈を使用して、フロントエンド構成の IPSET 名を指定します。IPSET はコンテンツスイッチング仮想サーバーにバインドされます。この注釈は、ingress.citrix.com/frontend-ipです。 -
    注: 注釈で指定するIPSET名は、Citrix ADCですでに構成されている必要があります。  
ingress.citrix.com/secure-port ポート番号 HTTPS トラフィック用のポートを設定するには、この注釈を使用します。このポートは、対応するCS仮想サーバーのポート値としてCitrix ADCで構成されます。 443
ingress.citrix.com/insecure-port ポート番号 この注釈を使用して、HTTP、TCP、または UDP トラフィック用にポートを設定します。このポートは、対応するCS仮想サーバーのポート値としてCitrix ADCで構成されます。 80
ingress.citrix.com/insecure-termination allowredirect、または disallow HTTPトラフィックを許可するには、allowを使用し、HTTPリクエストを HTTPS にリダイレクトするにはredirectを、HTTPトラフィックをドロップする場合はdisallowを使用します。 disallow
    たとえば、次のようになります:ingress.citrix.com/insecure-termination: "redirect"  
ingress.citrix.com/secure-backend JSON 形式で、セキュアバックエンド用のサービスのリスト Citrix ADCとアプリケーションの間で安全なHTTPSを確立する場合はTrue、アプリケーションへの安全でないHTTP接続Citrix ADCを確立する場合はFalseを使用します。 False
    たとえば、次のようになります:ingress.citrix.com/secure-backend: {"app1":"True", "app2":"False", "app3":"True"}  
kubernetes.io/ingress.class イングレス・クラス名 これは、特定の Ingress リソースを Ingress コントローラに関連付ける方法の 1 つです。 すべての入力を設定します。
    たとえば、次のようになります:kubernetes.io/ingress.class:"Citrix"  
ingress.citrix.com/secure-service-type ssl または ssl_tcp この注釈により、プロトコルとして SSL over TCP を使用した L4 負荷分散が可能になります。TCP経由で SSL を使用する場合は、ssl_tcpを使用します。 ssl
ingress.citrix.com/insecure-service-type httptcpudpsip_udp、または any この注釈により、プロトコルとして tcp/udp/sip_udp any を使用した L4 負荷分散が可能になります。プロトコルとして TCP を使用する場合は 、tcpを使用します。UDP をプロトコルとして使用する場合は 、udpを使用します。 http
ingress.citrix.com/path-match-method prefix または exact この注釈は、イングレス・パス・マッチングに使用します。 Citrix Ingress Controller で任意のパス文字列をプレフィックス式と見なす場合にprefixを使用します 。Citrix Ingress Controller で、パスを完全一致と見なすためにexactを使用します 。 prefix
    たとえば、ingress.citrix.com/path-match-method: "prefix"注釈は、任意のパス文字列をプレフィックス式と見なすように Citrix Ingress Controller を定義します。  
ingress.citrix.com/deployment dsr この注釈を使用して、Citrix ADC でダイレクトサーバーリターン(DSR)構成を作成します。  
    たとえば、ingress.citrix.com/deployment: "dsr"注釈はCitrix ADCでDSR構成を作成します。  
ingress.citrix.com/preconfigured-certkey 事前に設定された証明書キーとタイプ。証明書タイプは、デフォルト、SNI、または CA にすることができます。 この注釈を使用して、再利用してアプリケーションにバインドしたいCitrix ADC内の事前構成済みの証明書キーを指定します。 証明書の名前とともにタイプパラメータが指定されていない場合、証明書はデフォルト(SNI以外)タイプと見なされます。
    たとえば、 ingress.citrix.com/preconfigured-certkey : '{"certs": [ {"name": "certkey1", "type": "default"}, {"name": "certkey2", "type": "sni"} ] }注釈では、 certkey1は非SNI証明書として使用され、certkey2はSNI証明書として使用されます。  

Ingress のスマート注釈

スマート注釈は、Citrix ADCエンティティ名を使用してCitrix ADC機能を効率的に有効にするために、Citrix Ingressコントローラーによって提供されるオプションです。Citrix Ingress Controller は、Kubernetes のイングレスを Citrix ADC オブジェクトのセットに変換します。スマート注釈を使用すると、これらのオブジェクトを効率的にコントロールできます。

:スマート注釈を使用するには、Citrix ADC 機能とそれぞれのエンティティ名を十分に理解している必要があります。Citrix ADC 機能とエンティティ名について詳しくは、 Citrix ADC ドキュメントを参照してください

スマート注釈は JSON 形式を入力として受け取ります。JSON形式で渡すキーと値は、Citrix ADC NITRO 形式と一致する必要があります。Citrix ADC NITRO APIについて詳しくは、「 Citrix ADC 12.1 REST API-NITRO ドキュメント」を参照してください

たとえば、 SRCIPDESTIPHASH ベースの lb メソッドを有効にする場合は、対応する NITRO キーと値の形式でそれぞれlbmethodSRCIPDESTIPHASHを使用する必要があります。

次の表に、Citrix Ingress Controller によって提供されるスマート注釈の詳細を示します。

Citrix ADC エンティティ名 スマート注釈
lbvserver ingress.citrix.com/lbvserver ingress.citrix.com/lbvserver: '{"citrix-svc":{"lbmethod":"SRCIPDESTIPHASH"}}'
servicegroup ingress.citrix.com/servicegroup ingress.citrix.com/servicegroup: '{"appname":{"cip": "Enabled","cipHeader":"X-Forwarded-For"}}'
monitor ingress.citrix.com/monitor ingress.citrix.com/monitor: '{"appname":{"type":"http"}}'
csvserver ingress.citrix.com/csvserver ingress.citrix.com/csvserver: '{"stateupdate": "ENABLED"}'

HTTP、TCP、およびSSLプロファイルのスマート注釈について詳しくは、 Citrix ADCでのHTTP、TCP、またはSSLプロファイルの構成を参照してください

スマート注釈付きの Ingress YAML のサンプル

以下は Ingress YAML のサンプルです。これには、lbvserver、servicegroup、およびモニターなどのエンティティを使用してCitrix ADC機能を有効にするスマート注釈が含まれています。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/frontend-ip: 192.168.1.1
    ingress.citrix.com/insecure-port: "80"
    ingress.citrix.com/lbvserver: '{"citrix-svc":{"lbmethod":"LEASTCONNECTION", "persistenceType":"SOURCEIP"}}'
    ingress.citrix.com/monitor: '{"citrix-svc":{"type":"http"}}'
    ingress.citrix.com/servicegroup: '{"citrix-svc":{"usip":"yes"}}'
  name: citrix
spec:
  rules:
  - host: citrix.org
    http:
      paths:
      - backend:
          service:
            name: citrix-svc
            port:
              number: 80
        path: /
        pathType: Prefix
<!--NeedCopy-->

サンプル Ingress YAMLには 、サービスcitrix-svcに関連するユースケースが含まれています。次の表では、このサンプルで使用されているスマート注釈について説明します。

スマート注釈 説明
ingress.citrix.com/lbvserver: '{"citrix-svc":{"lbmethod":"LEASTCONNECTION", "persistenceType":"SOURCEIP"}}' 負荷分散方法を [ 最小接続 ] に設定し、 送信元 IP アドレスの永続性も設定します
ingress.citrix.com/servicegroup: '{"citrix-svc":{"usip":"yes"}}' イングレスCitrix ADCデバイスでソースIPモード(USIP)の使用を有効にします 。Citrix ADCでUSIPを有効にすると、バックエンドポッドとの通信にクライアントのIPアドレスが使用されます。
ingress.citrix.com/monitor: '{"citrix-svc":{"type":"http"}}' サービスグループのカスタム HTTP モニタを作成します

注:

複数の Ingress が同じフロントエンド IP アドレスとポートを共有している場合、複数の Ingress 構成によって競合する構成を提供することはできません。

既定では、コンテンツスイッチング仮想サーバーは、バインドされているターゲットの負荷分散仮想サーバーの状態には依存しません。注釈ingress.citrix.com/csvserver: '{"stateupdate": "ENABLED"}'は、コンテンツスイッチングポリシーによってバインドされた負荷分散仮想サーバーの状態に基づいて、 コンテンツスイッチング仮想サーバーの状態を考慮するようにコンテンツスイッチング仮想サーバーを設定します。

ルートのスマート注釈

Ingress と同様に、OpenShift ルートでスマート注釈を使用することもできます。 Citrix Ingress Controller は、OpenShift のルートを Citrix ADC オブジェクトのセットに変換します。

次の表に、Citrix Ingress Controller によって提供されるスマート注釈の詳細を示します。

Citrix ADC エンティティ名 スマート注釈
lbvserver route.citrix.com/lbvserver route.citrix.com/lbvserver: '{"citrix-svc":{"lbmethod":"SRCIPDESTIPHASH"}}'
servicegroup route.citrix.com/servicegroup route.citrix.com/servicegroup: '{"appname":{"cip": "Enabled","cipHeader":"X-Forwarded-For"}}'
monitor route.citrix.com/monitor route.citrix.com/monitor: '{"appname":{"type":"http"}}'

スマート注釈付きのルートマニフェストの例

次に、ルート YAML ファイルの例を示します。

apiVersion: route.openshift.io/v1
kind: Route
metadata:
  name: citrix
  annotations:
    route.citrix.com/lbvserver: '{"citrix-svc":{"lbmethod":"LEASTCONNECTION", "persistenceType":"SOURCEIP"}}'
    route.citrix.com/servicegroup: '{"citrix-svc":{"usip":"yes"}}'
    route.citrix.com/monitor: '{"citrix-svc":{"type":"http"}}'
spec:
  host:  citrix.org
  port:
    targetPort: 80
  to:
    kind: Service
    name: citrix-svc
    weight: 100
  wildcardPolicy: None
<!--NeedCopy-->

サンプルルートマニフェストには、 サービスcitrix-svcに関連するユースケースが含まれています。次の表では、サンプルルートで使用されるスマート注釈について説明します。

スマート注釈 説明
route.citrix.com/lbvserver: '{"citrix-svc":{"lbmethod":"LEASTCONNECTION", "persistenceType":"SOURCEIP"}}' 負荷分散方法を [ 最小接続 ] に設定し、 送信元 IP アドレスの永続性も設定します
route.citrix.com/servicegroup: '{"citrix-svc":{"usip":"yes"}}' Citrix ADCデバイスでソースIPモード(USIP)の使用を有効にします 。Citrix ADCでUSIPを有効にすると、バックエンドポッドとの通信にクライアントのIPアドレスが使用されます。
route.citrix.com/monitor: '{"citrix-svc":{"type":"http"}}' サービスグループのカスタム HTTP モニタを作成します

サービス注釈

Citrix がサポートするサービス注釈は次のとおりです。

注: サービス注釈では、 index はサービス仕様ファイル内のポートの順序付きインデックスです。たとえば、サービス仕様に 2 つのポートがある場合、1 番目のポートのインデックスは 0 で、2 番目のポートのインデックスは 1 になります。

[注釈] 説明
service.citrix.com/service-type-<index> この注釈を使用して、作成されたCitrix ADCエンティティのサービスタイプを指定します。指定できる値はTCPHTTPSSLUDPANYSSL_TCPおよびSIP_UDPです。 service.citrix.com/service-type-0: ‘SSL’
service.citrix.com/ssl-certificate-data-<index> この注釈を使用して、サーバー証明書の値を PEM 形式で指定します。 service.citrix.com/ssl-certificate-data-0: | <certificate>
service.citrix.com/ssl-key-data-<index> この注釈を使用して、サーバーキー値を PEM 形式で指定します。 service.citrix.com/ssl-key-data-0: | <key>
service.citrix.com/ssl-ca-certificate-data-<index> この注釈を使用して、クライアント証明書を PEM 形式で検証するためのサーバー CA 証明書の値を指定します。 service.citrix.com/ssl-ca-certificate-data-0: | <certificate>
service.citrix.com/ssl-backend-ca-certificate-data-<index> この注釈を使用して、バックエンドのサーバー証明書を PEM 形式で検証するための CA 証明書値を指定します。 service.citrix.com/ssl-backend-ca-certificate-data-0: | <certificate>
service.citrix.com/ssl-termination-<index> この注釈を使用して SSL ターミネーションを指定します。指定できる値は、 EDGE およびREENCRYPTです 。 service.citrix.com/ssl-termination-0: ‘EDGE’
service.citrix.com/insecure-redirect この注釈を使用して、安全でないトラフィックをセキュアなポートにリダイレクトします。{secure-portname : port-number} または {secure-portnumber- secure-port-protocol : insecure-portnumber } を使用してセキュアポートを指定し、セキュアでないポートからのトラフィックをリダイレクトできます。 service.citrix.com/insecure-redirect: ‘{“port-443”: 80 }’ or service.citrix.com/insecure-redirect: ‘{“443-tcp”: 80 }’
service.citrix.com/frontend-ip この注釈を使用して、タイプLoadBalancerのサービスの VIP を渡します。 service.citrix.com/frontend-ip: ‘192.168.1.1’
service.citrix.com/ipam-range この注釈を使用して、Citrix IPAM コントローラーに指定された一連の範囲から特定の IP アドレス範囲を選択します。この注釈は LoadBalancer タイプのサービスに使用されます。 service.citrix.com/ipam-range: ‘Dev’
service.citrix.com/secret この注釈を使用して、フロントエンドサーバー証明書のシークレットリソースの名前を指定します。詳細と例については、「 LoadBalancer タイプのサービスの SSL 証明書」を参照してください。 service.citrix.com/secret: ‘hotdrink-secret’
service.citrix.com/ca-secret この注釈は、クライアント証明書認証用の CA 証明書を提供するために使用します。この証明書は、Citrix ADC のフロントエンドSSL仮想サーバーにバインドされます。詳細と例については、「 LoadBalancer タイプのサービスの SSL 証明書」を参照してください。 service.citrix.com/ca-secret: ‘hotdrink-ca-secret’
service.citrix.com/backend-secret Citrix ADCとワークロード間のバックエンド通信が暗号化されたチャネルで行われ、ワークロードでクライアント認証が必要な場合は、この注釈を使用します。この証明書は SSL ハンドシェイク中にサーバーに送信され、バックエンド SSL サービスグループにバインドされます。詳細と例については、「 LoadBalancer タイプのサービスの SSL 証明書」を参照してください。 service.citrix.com/backend-secret: ‘hotdrink-secret’
service.citrix.com/backend-ca-secret この注釈を使用して、バックエンドサーバー証明書を認証するサーバー認証を有効にします。この構成では、サーバーのCA証明書がCitrix ADC上のSSLサービスにバインドされます。詳細と例については、「 LoadBalancer タイプのサービスの SSL 証明書」を参照してください。 service.citrix.com/backend-ca-secret: ‘hotdrink-ca-secret’
service.citrix.com/preconfigured-certkey この注釈を使用して、フロントエンドサーバー証明書として使用されるCitrix ADCで事前構成された証明書キーの名前を指定します。 service.citrix.com/事前構成済み証明書キー:’coffee-cert’
service.citrix.com/preconfigured-ca-certkey この注釈を使用して、クライアント証明書認証用のCA証明書として使用されるCitrix ADCで事前構成された証明書キーの名前を指定します。この証明書は、Citrix ADC のフロントエンドSSL仮想サーバーにバインドされます。 service.citrix.com/事前設定済みバックエンド証明書キー:’coffee-cert’
service.citrix.com/preconfigured-backend-certkey この注釈を使用して、バックエンドSSLサービスグループにバインドするCitrix ADCで事前構成された証明書キーの名前を指定します。この証明書は、サーバ認証のための SSL ハンドシェイク中にサーバに送信されます。 service.citrix.com/事前設定済みCA証明書キー:’coffee-ca-cert’
service.citrix.com/preconfigured-backend-ca-certkey この注釈を使用して、サーバー認証のためにバックエンドSSLサービスグループにバインドするCitrix ADCで事前構成されたCA証明書キーの名前を指定します。 service.citrix.com/事前設定済みバックエンド ca-certkey: ‘coffee-ca-cert’

安全でないトラフィックをリダイレクトするための、サービス注釈付きの YAML のサンプル

この例では、セキュアでないポート 80 で要求を行っているクライアントからのトラフィックをセキュアポート 443 にリダイレクトする方法を示します。

トラフィックをリダイレクトするために、サービス YAML ファイルに次の注釈が指定されています。

service.citrix.com/insecure-redirect: '{"port-443": 80}'

サービス定義の例を次に示します。


apiVersion: v1
kind: Service
metadata:
  name: frontend-service
  annotations:
    service.citrix.com/service-type-0: SSL
    service.citrix.com/frontend-ip: '192.2.170.26'
    service.citrix.com/secret: '{"port-443": "web-ingress-secret"}'
    service.citrix.com/ssl-termination-0: 'EDGE'
    service.citrix.com/insecure-redirect: '{"port-443": 80}'
spec:
  type: LoadBalancer
  selector:
    app: frontend
  ports:
  - port: 443
    targetPort: 80
    name: port-443

<!--NeedCopy-->

サービスのスマート注釈

サービスのスマート注釈は、Citrix ADC構成パラメーターのカスタム値でCitrix ADCを構成するために使用されます。注釈は、East-Westトラフィックに使用されるCitrix ADC CPXのタイプLoadBalancerのサービスおよびサービスに使用されます。

注:

North-Southトラフィック用にNodePortまたはClusterIPを使用してサービスを構成した場合、Citrix ADCは、サービス注釈ではなく、該当するイングレススマート注釈を使用して構成されます。

サービスのスマート注釈は、JSON 形式を入力として受け取ります。JSON形式で渡すキーと値は、Citrix ADC NITRO 形式と一致する必要があります。Citrix ADC NITRO APIについて詳しくは、「 Citrix ADC 12.1 REST API-NITRO ドキュメント」を参照してください

サービスのスマート注釈の例を次に示します。

service.citrix.com/lbvserver: '{"80-tcp":{"lbmethod":"SRCIPDESTIPHASH"}}'

この注釈は、指定されたサービスの80-tcpポートに対して、 負荷分散仮想サーバーの負荷分散方法をSRCIPDESTIPHASHとして設定します。

次の表に、サービスのスマート注釈の詳細を示します。

Citrix ADC エンティティ名 サービスのためのスマート注釈
lbvserver service.citrix.com/lbvserver service.citrix.com/lbvserver: '{"80-tcp":{"lbmethod":"SRCIPDESTIPHASH"}}'
csvserver service.citrix.com/csvserver service.citrix.com/csvserver: '{"l2conn":"on"}'
servicegroup service.citrix.com/servicegroup service.citrix.com/servicegroup: '{"80-tcp":{"usip":"yes"}}'
monitor service.citrix.com/monitor service.citrix.com/monitor: '{"80-tcp":{"type":"http"}}'
分析プロファイル service.citrix.com/analyticsprofile service.citrix.com/analyticsprofile: '{"80-tcp":{"webinsight": {"httpurl":"ENABLED", "httpuseragent":"ENABLED"}}}'

スマート注釈は次のようにサービスに使用できます。

  • 注釈にport-protocol値を指定する:サービス定義で、 注釈にport-protocol値を指定すると、注釈はそのサービスの特定のポートに制限されます。
  • 注釈にport-protocol値を指定しない: 注釈にport-protocol値を指定しない場合、注釈はサービスによって使用されるすべてのポートに適用されます。

サービスのスマート注釈を使用した Ingress YAML のサンプル

以下に、基本的な Apache Web サーバーベースのアプリケーションのデプロイメントとサービス定義の例を示します。これには、lbvserver、csvserver、サービスグループ、モニター、分析プロファイルなどのエンティティを使用してCitrix ADC機能を有効にするサービスのスマート注釈が含まれています。

# If using this on GKE, eusure sure you have cluster-admin role for your account
#The sample is a basic apache web server as application for illustration
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: apache
  labels:
      name: apache
spec:
  selector:
    matchLabels:
      app: apache
  replicas: 8
  template:
    metadata:
      labels:
        app: apache
    spec:
      containers:
      - name: apache
        image: httpd:latest
        ports:
        - name: http
          containerPort: 80
        imagePullPolicy: IfNotPresent

---
#Expose the apache web server as a service
apiVersion: v1
kind: Service
metadata:
  name: apache
  annotations:
    service.citrix.com/csvserver: '{"l2conn":"on"}'
    service.citrix.com/lbvserver: '{"80-tcp":{"lbmethod":"SRCIPDESTIPHASH"}}'
    service.citrix.com/servicegroup: '{"80-tcp":{"usip":"yes"}}'
    service.citrix.com/monitor: '{"80-tcp":{"type":"http"}}'
    service.citrix.com/frontend-ip: '10.217.212.16'
    service.citrix.com/analyticsprofile: '{"80-tcp":{"webinsight": {"httpurl":"ENABLED", "httpuseragent":"ENABLED"}}}'
    NETSCALER_VPORT: '80'
  labels:
    name: apache
spec:
  externalTrafficPolicy: Local
  type: LoadBalancer
  selector:
    name: apache
  ports:
  - name: http
    port: 80
    targetPort: http
  selector:
    app: apache
---
<!--NeedCopy-->

セキュアでないサービスタイプ注釈での SIP_UDP サポートのための Ingress YAML のサンプル

Ingress YAML の例を次に示します。このサンプルには、 ingress.citrix.com/insecure-service-type 注釈を使用して SIP over UDP サポートを有効にするための設定が含まれています。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/frontend-ip: 1.1.1.1
    ingress.citrix.com/insecure-port: "5060"
    ingress.citrix.com/insecure-service-type: sip_udp
    ingress.citrix.com/lbvserver: '{"asterisk17":{"lbmethod":"CALLIDHASH","persistenceType":"CALLID"}}'
    kubernetes.io/ingress.class: cic-vpx
  name: sip-ingress
spec:
  defaultBackend:
    service:
      name: asterisk17
      port:
        number: 5060
<!--NeedCopy-->
注釈