IstioOperator@Istio¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. セットアップ¶
インストール¶
▼ チャートとして¶
チャートリポジトリからチャートをインストールし、Kubernetesリソースを作成する。
プロファイルは、設定済みのIstioOperatorのチャートであり、istioctl
コマンドインストール時にmanifests
ディレクトリ以下に同梱される。
(1)
-
istioctl
コマンドでIstioOperatorを指定する。IstioOperatorは、デフォルトでistio-system
にIstioリソースを作成するようになっている。
$ istioctl operator init
Installing operator controller in namespace: istio-operator using image: docker.io/istio/operator:<リビジョン番号>
Operator controller will watch namespaces: istio-system
✅ Istio operator installed
✅ Installation complete
(2)
-
IstioOperatorが定義されたマニフェストを、
istioctl
コマンドまたはkubectl
コマンドを使用して、Istioリソースを作成する。その代わりにここで、IstioOperatorにHelmを使用させてIstioリソースを作成することもできる。
kubectl apply
コマンドでも作成できるが、成否の実行ログがわかりにくいことに注意する。
# istioctlコマンド
$ istioctl install -y -f ./istio-operator.yaml
✅ Istio core installed
✅ Istiod installed
✅ Ingress gateways installed
✅ Installation complete
Making this installation the default for injection and validation.
# kubectlコマンド
$ kubectl apply -f istio-operator.yaml
istiooperator.install.istio.io/istio-operator created
▼ チャートとして¶
チャートリポジトリからチャートをインストールし、Kubernetesリソースを作成する。
チャートは、istioctl
コマンドインストール時のmanifests
ディレクトリ以下に同梱されている。
$ helm install <Helmリリース名> manifests/charts/istio-operator -n istio-operator --version <バージョンタグ>
02. metadata¶
.metadata.name¶
リソース名はistio-operator
とする必要がある。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
03. spec¶
.spec.component¶
▼ componentとは¶
IstioOperator管理でIstioリソースを作成する。
▼ <component名>
.k8s¶
各componentが共通的に持つ設定項目である。
各種Kubernetesリソースと同じ設定値を拡張機能として設定できる。
ただし、執筆時点 (2022/06/04) では、これを使用することは非推奨である。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
components:
<component名>:
enabled: "true"
k8s:
# HorizontalPodAutoscaler
hpaSpec:
maxReplicas: 10
minReplicas: 2 # componentを冗長化する
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: node.kubernetes.io/nodetype
operator: In
# meshというNodeグループにスケジューリングさせられるようにする。
values:
- mesh
▼ base¶
baseコンポーネントのオプションを設定する。
baseコンポーネントを有効化しないと、カスタムリソースを作成できない。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
components:
base:
enabled: "true"
▼ cni¶
istio-cniコンポーネントのオプションを設定する。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
components:
cni:
enabled: "true"
namespace: kube-system
▼ egressGateways¶
egressGatewaysコンポーネントのオプションを設定する。
Istio EgressGatewayを直接的に作成するのではなく、IstioOperatorに作成させる。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
components:
egressGateways:
- name: istio-egressgateway
enabled: "true"
▼ ingressGateways¶
ingressGatewaysコンポーネントのオプションを設定する。
Istio IngressGatewayを直接的に作成するのではなく、IstioOperatorに作成させる。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
components:
ingressGateways:
- name: istio-ingressgateway
enabled: "true"
.spec.ingressGateways.k8s
キーでIstio IngressGatewayを設定できるが、これは非推奨である。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
components:
ingressGateways:
- name: istio-ingressgateway
enabled: "true"
k8s:
service:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
補足として、以下の方法でユーザー定義のIstio IngressGatewayを作成できる (かなり大変) 。
最終的な設定値は、kubectl get
コマンドで確認できる。
$ kubectl get service istio-ingressgateway -o yaml -n istio-system
---
apiVersion: v1
kind: Service
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{...} # ここにも、.json形式で設定値が記載されている。
creationTimestamp: "2022-01-01T12:00:00Z"
labels:
app: istio-ingressgateway
install.operator.istio.io/owning-resource: istio-operator
install.operator.istio.io/owning-resource-namespace: istio-system
istio: ingressgateway
istio.io/rev: default
operator.istio.io/component: IngressGateways
operator.istio.io/managed: Reconcile
operator.istio.io/version: 1.12.1
release: istio
name: istio-ingressgateway
namespace: istio-system
spec:
allocateLoadBalancerNodePorts: "true"
clusterIP: *.*.*.*
clusterIPs:
- *.*.*.*
externalTrafficPolicy: Cluster
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: http2
nodePort: 30548
port: 80
protocol: TCP
targetPort: 8080
- name: status-port
nodePort: 31817
port: 15021
protocol: TCP
targetPort: 15021
- name: https
nodePort: 32016
port: 443
protocol: TCP
targetPort: 8443
selector:
app: istio-ingressgateway
istio: ingressgateway
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: *.*.*.*
▼ istiodRemote¶
istiodコンポーネントのオプションを設定する。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
components:
istiodRemote:
enabled: "false"
▼ pilot¶
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
components:
pilot:
enabled: "true"
.spec.defaultRevision¶
▼ defaultRevisionとは¶
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
defaultRevision: "true"
.spec.hub¶
▼ hubとは¶
Istioリソースを構成するコンテナのベースイメージのレジストリを設定する。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
hub: docker.io/istio
.spec.namespace¶
▼ namespaceとは¶
IstioOperator管理で作成されるIstioリソースのNamespaceを設定する。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
namespace: foo-namespace
.spec.profile¶
▼ profileとは¶
プロファイルを設定する。
実際には設定済みのIstioOperatorである。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
profile: default
.spec.revision¶
▼ revisionとは¶
Istiodコントロールプレーンをカナリアリリースを使用してアップグレードする場合、新しく作成するバージョンを設定する。
バージョンの表記方法がハイフン繋ぎであることに注意する。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
revision: 1-10-0 # ハイフン繋ぎのバージョン表記
.spec.tag¶
▼ tagとは¶
Istioリソースを構成するコンテナのベースイメージのバージョンを設定する。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
tag: 1.12.1
.spec.values¶
▼ valuesとは¶
manifests/charts/global.yaml
ファイルの設定値を上書きする。
▼ base¶
values
ファイルのbase
の項目を上書きする。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
values:
base:
enableCRDTemplates: "false"
validationURL: ""
▼ gateways.istio-egressgateway¶
values
ファイルのistio-egressgateway
の項目を上書きする。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
values:
gateways:
# Istio EgressGateway
istio-egressgateway:
env: {}
autoscaleEnabled: "true"
type: ClusterIP
name: istio-egressgateway
secretVolumes:
- name: egressgateway-certs
secretName: istio-egressgateway-certs
mountPath: /etc/istio/egressgateway-certs
- name: egressgateway-ca-certs
secretName: istio-egressgateway-ca-certs
mountPath: /etc/istio/egressgateway-ca-certs
▼ gateways.istio-ingressgateway¶
values
ファイルのistio-ingressgateway
の項目を上書きする。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
values:
gateways:
# Istio IngressGateway
istio-ingressgateway:
env: {}
# IstioOperatorをroot権限の実行ユーザーを使用する
runAsRoot: "true"
autoscaleEnabled: "true"
type: LoadBalancer
name: istio-ingressgateway
secretVolumes:
- name: ingressgateway-certs
secretName: istio-ingressgateway-certs
mountPath: /etc/istio/ingressgateway-certs
- name: ingressgateway-ca-certs
secretName: istio-ingressgateway-ca-certs
mountPath: /etc/istio/ingressgateway-ca-certs
▼ pilot¶
values
ファイルのpilot
の項目を上書きする。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
values:
pilot:
autoscaleEnabled: "true"
autoscaleMin: 1
autoscaleMax: 5
replicaCount: 1
image: pilot
traceSampling: 1.0
env: {}
cpu:
targetAverageUtilization: 80
nodeSelector: {}
keepaliveMaxServerConnectionAge: 30m
enableProtocolSniffingForOutbound: "true"
enableProtocolSniffingForInbound: "true"
deploymentLabels:
podLabels: {}
configMap: "true"
▼ proxy_init¶
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
values:
proxy_init:
image: proxyv2
resources:
limits:
cpu: 2000m
memory: 1024Mi
requests:
cpu: 10m
memory: 10Mi
▼ sidecarInjectorWebhook¶
istio-proxy
コンテナごとのオプション値を設定する。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio-operator
spec:
values:
sidecarInjectorWebhook:
templates:
custom: |
spec:
containers:
- name: istio-proxy
...