콘텐츠로 이동

~/.calico/calicoctl.cfg

플랫폼/방법명령어
Operator (Recommended)kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/tigera-operator.yaml
Manifest-Basedkubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
Helmhelm install calico projectcalico/tigera-operator --namespace tigera-operator --create-namespace
calicoctl (Linux)curl -L https://github.com/projectcalico/calico/releases/download/v3.27.0/calicoctl-linux-amd64 -o calicoctl && chmod +x calicoctl && sudo mv calicoctl /usr/local/bin/
calicoctl (macOS)brew install calicoctl
calicoctl (Windows)Invoke-WebRequest -Uri "https://github.com/projectcalico/calico/releases/download/v3.27.0/calicoctl-windows-amd64.exe" -OutFile "calicoctl.exe"
calicoctl as Podkubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calicoctl.yaml
Amazon EKSkubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico-vxlan.yaml
Azure AKSaz aks create --network-plugin azure --network-policy calico
명령어설명
calicoctl versionCalico 버전 정보 표시
calicoctl node status노드 BGP 피어링 상태 및 경로 표시
calicoctl get nodesCalico를 실행 중인 모든 노드 나열
calicoctl get nodes -o wide추가 세부 정보가 있는 노드 나열하기
calicoctl get ippools모든 IP 주소 풀 표시
calicoctl get ippool default-ipv4-ippool -o yaml자세한 IP 풀 구성 표시
calicoctl get workloadendpoints모든 워크로드 엔드포인트(pods) 나열
calicoctl get wep --all-namespaces모든 네임스페이스에서 워크로드 엔드포인트 나열
calicoctl get networkpolicy모든 네트워크 정책 표시
calicoctl get networkpolicy -n NAMESPACE특정 네임스페이스의 정책 나열
calicoctl get globalnetworkpolicy글로벌 네트워크 정책 표시
calicoctl get profiles모든 Calico 프로필 나열하기
calicoctl get hostendpoints호스트 엔드포인트 구성 표시
kubectl get pods -n calico-systemCalico 시스템 포드 상태 확인
kubectl get installation default -o yamlCalico 설치 구성 보기
명령어설명
calicoctl apply -f network-policy.yaml파일에서 네트워크 정책 적용
calicoctl delete networkpolicy POLICY_NAME -n NAMESPACE특정 네트워크 정책 삭제
calicoctl get bgpconfig default -o yamlBGP 구성 보기
calicoctl get bgppeers모든 BGP 피어 구성 나열
calicoctl apply -f bgppeer.yamlBGP 피어링 구성
calicoctl get felixconfiguration default -o yamlFelix (agent) 구성 보기
calicoctl patch felixconfiguration default --patch='{"spec":{"bpfEnabled":true}}'eBPF 데이터 플레인 활성화
calicoctl ipam showIP 주소 할당 정보 표시
calicoctl ipam show --show-blocks자세한 IP 할당 블록 표시
calicoctl ipam release --ip=IP_ADDRESS특정 IP 주소 해제
calicoctl datastore migrate export > calico-data.yamlCalico 데이터스토어 내보내기
calicoctl datastore migrate import < calico-data.yamlCalico 데이터스토어 가져오기
calicoctl get node NODE_NAME -o yaml자세한 노드 구성 가져오기
calicoctl patch ippool default-ipv4-ippool -p '{"spec":{"natOutgoing":true}}'IP 풀에 대한 NAT 활성화
calicoctl convert -f old-policy.yaml -o new-policy.yaml정책을 새로운 API 버전으로 변환
# ~/.calico/calicoctl.cfg
apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
  datastoreType: "kubernetes"
  kubeconfig: "/home/user/.kube/config"
```## 고급 사용법
```bash
export CALICO_DATASTORE_TYPE=kubernetes
export CALICO_KUBECONFIG=~/.kube/config
export CALICO_APICONFIG=/path/to/calicoctl.cfg
```## 구성
```yaml
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: default-ipv4-ippool
spec:
  cidr: 192.168.0.0/16
  ipipMode: CrossSubnet
  natOutgoing: true
  disabled: false
  blockSize: 26
```### calicoctl 구성 파일
```yaml
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
  name: default
spec:
  logSeverityScreen: Info
  nodeToNodeMeshEnabled: true
  asNumber: 64512
  serviceClusterIPs:
  - cidr: 10.96.0.0/12
```### 환경 변수
```yaml
apiVersion: projectcalico.org/v3
kind: FelixConfiguration
metadata:
  name: default
spec:
  logSeverityScreen: Info
  reportingInterval: 60s
  ipipEnabled: true
  ipipMTU: 1440
  bpfEnabled: false
  wireguardEnabled: false
```### IP 풀 구성
```bash
# Create deny-all default policy
cat <<EOF | calicoctl apply -f -
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: default-deny
  namespace: production
spec:
  selector: all()
  types:
  - Ingress
  - Egress
EOF

# Verify policy
calicoctl get networkpolicy -n production
```### BGP 구성
```bash
# Allow frontend to backend communication
cat <<EOF | calicoctl apply -f -
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: frontend-to-backend
  namespace: production
spec:
  selector: app == 'frontend'
  types:
  - Egress
  egress:
  - action: Allow
    destination:
      selector: app == 'backend'
      ports:
      - 8080
EOF
```### Felix 구성
```bash
# Add BGP peer for Top-of-Rack switch
cat <<EOF | calicoctl apply -f -
apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
  name: rack1-tor
spec:
  node: k8s-node-01
  peerIP: 192.168.1.1
  asNumber: 64512
EOF

# Verify BGP peering
calicoctl node status
```## 일반적인 사용 사례
```bash
# Enable WireGuard on Felix
calicoctl patch felixconfiguration default --type=merge --patch='{"spec":{"wireguardEnabled":true}}'

# Verify WireGuard status
kubectl get nodes -o yaml | grep wireguard

# Check encryption on specific node
calicoctl get node NODE_NAME -o yaml | grep wireguard
```### 사용 사례 1: 네임스페이스로 모든 트래픽 거부
```bash
# Create global policy to protect Kubernetes nodes
cat <<EOF | calicoctl apply -f -
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: host-protection
spec:
  selector: has(host-endpoint)
  order: 0
  ingress:
  - action: Allow
    protocol: TCP
    destination:
      ports: [22, 179, 443, 6443]
  - action: Deny
  egress:
  - action: Allow
EOF
```### 사용 사례 2: 특정 Pod 간 트래픽 허용
`bpfEnabled: true`### 사용 사례 3: ToR 스위치와 BGP 피어링 구성
`calicoctl node status`### 사용 사례 4: WireGuard 암호화 활성화
`blockSize`### 사용 사례 5: 호스트 보호를 위한 글로벌 네트워크 정책 생성
`order`## 모범 사례
`calicoctl datastore migrate export`- **네트워크 정책을 초기에 사용**: 애플리케이션 배포 전 네임스페이스 수준에서 기본 거부 정책을 구현하여 제로 트러스트 보안을 처음부터 적용

| 문제 | 솔루션 |
|-------|----------|
| **Pods can't communicate across nodes** | Check BGP peering: `calicoctl node status`. Verify IP pool CIDR doesn't conflict: `calicoctl get ippools` |
| **Network policy not taking effect** | Verify policy selector matches pod labels: `kubectl get pods --show-labels`. Check policy order and types (Ingress/Egress) |
| **High CPU usage on nodes** | Enable eBPF dataplane: `calicoctl patch felixconfiguration default --patch='{"spec":{"bpfEnabled":true}}'` |
| **IP address exhaustion** | Check IP allocation: `calicoctl ipam show --show-blocks`. Increase IP pool size or adjust blockSize |
| **calicoctl commands fail** | Verify datastore config: `echo $CALICO_DATASTORE_TYPE`. Check kubeconfig: `kubectl get nodes` |
| **Calico pods in CrashLoopBackOff** | Check logs: `kubectl logs -n calico-system -l k8s-app=calico-node`. Verify kernel modules: `lsmod | grep ip_tables` |
| **BGP routes not propagating** | Disable node-to-node mesh if using ToR: `calicoctl patch bgpconfig default -p '{"spec":{"nodeToNodeMeshEnabled":false}}'` |
| **MTU issues causing packet loss** | Adjust IPIP MTU: `calicoctl patch felixconfig default -p '{"spec":{"ipipMTU":1440}}'` or disable IPIP |
| **WireGuard encryption not working** | Verify kernel support: `modprobe wireguard && lsmod | grep wireguard`. Check Felix config: `calicoctl get felixconfig default -o yaml` |
| **Workload endpoints not appearing** | Restart calico-node pod: `kubectl delete pod -n calico-system -l k8s-app=calico-node`. Verify CNI config: `cat /etc/cni/net.d/10-calico.conflist` |
## 빠른 참조: 정책 예시

### DNS 트래픽 허용

```yaml
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: allow-dns
  namespace: default
spec:
  selector: all()
  types:
  - Egress
  egress:
  - action: Allow
    protocol: UDP
    destination:
      selector: k8s-app == 'kube-dns'
      ports: [53]

특정 네임스페이스로부터의 인그레스 허용

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: allow-from-frontend
  namespace: backend
spec:
  selector: app == 'api'
  types:
  - Ingress
  ingress:
  - action: Allow
    source:
      namespaceSelector: name == 'frontend'

속도 제한 (글로벌 정책)```yaml

apiVersion: projectcalico.org/v3 kind: GlobalNetworkPolicy metadata: name: rate-limit-external spec: selector: role == ‘public-api’ types:

  • Ingress ingress:
  • action: Allow source: notNets: [10.0.0.0/8] metadata: annotations: rate-limit: “100”